【问题标题】:Django: Setting up multiple databases using sqlite3Django:使用 sqlite3 设置多个数据库
【发布时间】:2011-11-06 23:29:09
【问题描述】:

我一直在尝试在 Django1.3 上设置我的项目以使用多个数据库,在我的情况下是不同的 sqlite3 文件。我一直在阅读 Django 文档以及大量谷歌搜索但徒劳无功。

面临的问题

  1. 当使用带有 --database 的 syncdb 时,为什么该特定应用程序的表没有在默认数据库或其他 db 中创建?
  2. 正在为所有提到的数据库创建 Django 框架内部表(如 auth)。这是该功能应有的行为方式还是我错误地配置了相同的方式?

我的代码

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(SITE_ROOT, "db/defaultdb.sqlite"),
    },
    'app1': {
             'ENGINE': 'django.db.backends.sqlite3',
             'NAME': os.path.join(SITE_ROOT, "db/app1db.sqlite"),
    }
}

DATABASE_ROUTERS = ['dbrouter.MyAppRouter']

drouter.py

class MyAppRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'app1':
            return 'app1db'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'app1':
            return 'app1db'
        return None

    def allow_syncdb(self, db, model):
        if db == 'app1db':
            return model._meta.app_label == 'app1'
        elif model._meta.app_label == 'app1':
            return False
        return None

感谢大家的宝贵时间。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    在您的 db_for_readdb_for_write 方法中,

    if model._meta.app_label == 'app1':
        return 'app1db'
    return None
    

    您必须根据您的settings.DATABASES 返回db 别名,即app1。您的 allow_syncdb 方法中存在类似问题。你读过the docs吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2018-12-23
      • 2013-12-16
      • 2011-12-29
      • 1970-01-01
      • 2023-03-06
      • 2018-07-28
      相关资源
      最近更新 更多