0

私のdjangoプロジェクトの1つでセロリをセットアップしようとしています。セロリに別のデータベースを使用してもらいたい。現在、プロジェクトは開発段階にあるため、sqlite3 を使用しています。複数のデータベースをセットアップするために、次のことを行いました。

settings.py ファイルで定義されたデータベース。

DATABASES = {'default':
                {'ENGINE': 'django.db.backends.sqlite3',
                 'NAME':'devel',
                 'USER':'',
                 'PASSWORD':'',
                 'HOST':'',
                 'PORT':'',
                 },  
             'celery':
                {'ENGINE': 'django.db.backends.sqlite3',
                 'NAME':'celery',
                 'USER':'',
                 'PASSWORD':'',
                 'HOST':'',
                 'PORT':'',
                },  
}

db_routers.py ファイルに Router オブジェクトを作成しました

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_ROUTERsettings.py ファイルの変数を更新しました

DATABASE_ROUTERS = [
    'appname.db_routers.CeleryRouter',
]

さて、python manage.py syncdbテーブルがセロリ用に作成されていることがわかりますが、作成されたデータベースは1つだけdevelです. テーブルがdevelデータベースではなくデータベースに作成されるのはなぜceleryですか?

4

1 に答える 1

2

Django ドキュメントからの引用:

syncdb 管理コマンドは、一度に 1 つのデータベースで動作します。デフォルトでは、デフォルトのデータベースで動作しますが、 --database 引数を指定することで、syncdb に別のデータベースを同期するように指示できます。

実行してみてください:

./manage.py syncdb --database=celery
于 2013-01-01T11:12:03.390 に答える