如何停止Django" python manage.py syndb"从将表添加到设置中的多个数据库?

时间:2014-10-13 05:23:02

标签: python django syncdb

我在settings.py中配置了两个数据库,默认配置为另一个,名为" local_mysql"。

我想创建一个模型,这样当我python manage.py syncdb时,它只会填充在local_mysql数据库中。这怎么可能?

我找不到多少搜索。

2 个答案:

答案 0 :(得分:0)

您需要实现数据库路由器,详见documentation

  

如果您不希望每个应用程序同步到一个   特定数据库,您可以定义实现的数据库路由器   限制特定模型可用性的政策。

要定义路由器,它只是一个带有一些方法的类:

class MyRouter(object):

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'yourappname':
            return 'local_mysql'
        return None

    def db_for_write(self, model, **hints):
        return self.db_for_read(model, **hints)

    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'yourappname' or \
           obj2._meta.app_label == 'yourappname':
           return True
        return None

    def allow_migrate(self, db, model):
        if db == 'local_mysql':
            return model._meta.app_label == 'yourappname'
        elif model._meta.app_label == 'yourappname':
            return False
        return None

将此类放在名为routers.py的文件中,与views.py相同的位置,用于您要为其重定向数据库的应用程序。

然后,在settings.py中添加以下内容:

DATABASE_ROUTERS = ['yourappname.routers.MyRouter']

答案 1 :(得分:0)

您需要不同的设置文件。在设置下添加local.py。然后运行python

manage.py syncdb --settings=project.settings.local

在这里查看最多投票的答案: How to manage local vs production settings in Django?