私の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_ROUTER
settings.py ファイルの変数を更新しました
DATABASE_ROUTERS = [
'appname.db_routers.CeleryRouter',
]
さて、python manage.py syncdb
テーブルがセロリ用に作成されていることがわかりますが、作成されたデータベースは1つだけdevel
です. テーブルがdevel
データベースではなくデータベースに作成されるのはなぜcelery
ですか?