Database 使用多数据库设置时仅创建一个数据库
我试图在我的django项目中设置芹菜。我想芹菜使用一个单独的数据库。目前,由于项目处于开发阶段,我们正在使用sqlite3。为了设置多个数据库,我执行了以下操作 在settings.py文件中定义的数据库。 在db_routers.py文件中创建了路由器对象 更新了settings.py文件中的Database 使用多数据库设置时仅创建一个数据库,database,django,router,django-celery,Database,Django,Router,Django Celery,我试图在我的django项目中设置芹菜。我想芹菜使用一个单独的数据库。目前,由于项目处于开发阶段,我们正在使用sqlite3。为了设置多个数据库,我执行了以下操作 在settings.py文件中定义的数据库。 在db_routers.py文件中创建了路由器对象 更新了settings.py文件中的数据库\u路由器变量 现在,当我执行python manage.py syncdb时,我看到表是为芹菜创建的,但只创建了一个数据库,即devel。为什么表是在devel数据库中创建的,而不是在celle
数据库\u路由器
变量
现在,当我执行python manage.py syncdb
时,我看到表是为芹菜创建的,但只创建了一个数据库,即devel
。为什么表是在devel
数据库中创建的,而不是在cellery
数据库中创建的?引用自:
syncdb管理命令一次对一个数据库进行操作。默认情况下,它在默认数据库上运行,但通过提供--database参数,可以告诉syncdb同步其他数据库
尝试运行:
./manage.py syncdb --database=celery
这很有效。这意味着我们需要为每个数据库运行
syncdb
?
class CeleryRouter(object):
"""
This class will route all celery related models to a»
separate database.
"""
# Define the applications to be used in the celery database
APPS = (
'django',
'djcelery'
)
# Define Database Alias
DB = 'celery'
def db_for_read(self, model, **hints):
"""
Point read operations to celery database.
"""
if model._meta.app_label in self.APPS:
return self.DB
return None
def db_for_write(self, model, **hints):
"""
Point write operations to celery database.
"""
if model._meta.app_label in self.APPS:
return self.DB
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow any relation between two objects in the db pool
"""
if (obj1._meta.app_label is self.APPS) and \
(obj2._meta.app_label in self.APPS):
return True
return None
def allow_syncdb(self, db, model):
"""
Make sure the celery tables appear only in celery
database.
"""
if db == self.DB:
return model._meta.app_label in self.APPS
elif model._meta.app_label in self.APPS:
return False
return None
DATABASE_ROUTERS = [
'appname.db_routers.CeleryRouter',
]
./manage.py syncdb --database=celery