Django:使用sqlite3设置多个数据库

时间:2011-08-30 16:33:17

标签: django django-models

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

面临的问题

  1. 将syncdb与--database一起使用时,为什么不在默认数据库或其他数据库中创建该特定应用程序的表?
  2. 为所有提到的数据库创建了像auth这样的Django框架内部表。这是该功能的表现方式还是我错误地配置了相同的功能?
  3. 我的代码

    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']
    

    dbrouter.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
    

    感谢大家的时间。

1 个答案:

答案 0 :(得分:2)

使用db_for_readdb_for_write方法

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

您必须根据app1返回数据库别名settings.DATABASES。您的allow_syncdb方法存在类似问题。你看过the docs吗?