Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用多数据库设置时仅创建一个数据库_Database_Django_Router_Django Celery - Fatal编程技术网

Database 使用多数据库设置时仅创建一个数据库

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

我试图在我的django项目中设置芹菜。我想芹菜使用一个单独的数据库。目前,由于项目处于开发阶段,我们正在使用sqlite3。为了设置多个数据库,我执行了以下操作

在settings.py文件中定义的数据库。 在db_routers.py文件中创建了路由器对象 更新了settings.py文件中的
数据库\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