2014-04-21 29 views
0

我在Django中爲我的表格使用數據庫路由器,但由於某些奇怪的原因,South不斷向默認數據庫添加表格而不是正確的表格。 South不支持路由器嗎?我的包含模型的應用名爲backendSouth沒有在正確的數據庫中創建表格

我的settings.py:

DATABASE_ROUTERS = ['project.router.DatabaseAppsRouter'] 
DATABASE_APPS_MAPPING = {'backend': 'darwin_evolution'} 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'darwin_django', 
     'USER': '', 
     'PASSWORD': '', 
     'PORT': '8889', 
    }, 
    'weblaege_conditions': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'darwin_evolution', 
     'USER': '', 
     'PASSWORD': '', 
     # 'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock', # Or an IP Address that your DB is hosted on 
     'PORT': '8889', 
    } 
} 

router.py:

從django.conf導入設置

class DatabaseAppsRouter(object): 
    """ 
    A router to control all database operations on models for different 
    databases. 

    In case an app is not set in settings.DATABASE_APPS_MAPPING, the router 
    will fallback to the `default` database. 

    Settings example: 

    DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'} 
    """ 

    def db_for_read(self, model, **hints): 
     """"Point all read operations to the specific database.""" 
     if settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label): 
      return settings.DATABASE_APPS_MAPPING[model._meta.app_label] 
     return None 

    def db_for_write(self, model, **hints): 
     """Point all write operations to the specific database.""" 
     if settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label): 
      return settings.DATABASE_APPS_MAPPING[model._meta.app_label] 
     return None 

    def allow_relation(self, obj1, obj2, **hints): 
     """Allow any relation between apps that use the same database.""" 
     db_obj1 = settings.DATABASE_APPS_MAPPING.get(obj1._meta.app_label) 
     db_obj2 = settings.DATABASE_APPS_MAPPING.get(obj2._meta.app_label) 
     if db_obj1 and db_obj2: 
      if db_obj1 == db_obj2: 
       return True 
      else: 
       return False 
     return None 

    def allow_syncdb(self, db, model): 
     """Make sure that apps only appear in the related database.""" 
     if db in settings.DATABASE_APPS_MAPPING.values(): 
      return settings.DATABASE_APPS_MAPPING.get(model._meta.app_label) == db 
     elif settings.DATABASE_APPS_MAPPING.has_key(model._meta.app_label): 
      return False 
     return None 

執行syncdb問題:

./manage.py syncdb 
Syncing... 
Creating tables ... 
Traceback (most recent call last): 
    File "./manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 399, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 392, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 242, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle 
    return self.handle_noargs(**options) 
    File "/usr/local/lib/python2.7/dist-packages/south/management/commands/syncdb.py", line 92, in handle_noargs 
    syncdb.Command().execute(**options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 285, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 415, in handle 
    return self.handle_noargs(**options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py", line 112, in handle_noargs 
    emit_post_sync_signal(created_models, verbosity, interactive, db) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/sql.py", line 216, in emit_post_sync_signal 
    interactive=interactive, db=db) 
    File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py", line 185, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/management/__init__.py", line 101, in create_permissions 
    auth_app.Permission.objects.using(db).bulk_create(perms) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 356, in bulk_create 
    self._batched_insert(objs_without_pk, fields, batch_size) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 835, in _batched_insert 
    using=self.db) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 232, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1511, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 899, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 69, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 53, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 124, in execute 
    return self.cursor.execute(query, args) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 176, in execute 
    if not self._defer_warnings: self._warning_check() 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 92, in _warning_check 
    warn(w[-1], self.Warning, 3) 
_mysql_exceptions.Warning: Data truncated for column 'name' at row 29 
+0

您是否在創建表時使用了--database參數? –

+0

@SayanChowdhury,是否有這樣的程序? – JavaCake

+0

試試這個: ./manage.py migrate --database = weblaege_conditions –

回答

0

爲了反映數據庫中的更改schemamigration後,你需要運行

./manage.py migrate --database=weblaege_conditions 

按照documentation,它的運行默認的數據庫上,而是通過提供--database的說法,你可以創建在不同的數據庫中的表。