午後。私は話題に関する数多くの場所を読んでいて、それぞれの情報を一貫しているとは限りません。これはテストの設定なので、私は何かが動作していないことを見つけるために数か月を要したくありません---そしてこれに至ることが分かります。Django複数のデータベース(健全性チェック)
これ以上の経験を積んだ人には感謝し、何か提案をしてください。 (メインspiderproject
フォルダ内)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'abc123',
'HOST': 'localhost',
'PORT': '',
},
'ta1_db': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'testapp1db',
'USER': 'ta1',
'PASSWORD': 'ta1',
'HOST': 'localhost',
'PORT': '',
},
'ta2_db': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'testapp2db',
'USER': 'ta2',
'PASSWORD': 'ta2',
'HOST': 'localhost',
'PORT': '',
},
}
DATABASE_ROUTERS = ['spiderproject.routers.DBRouter',]
routers.py
settings.py
class DBRouter(object):
def db_for_read(self, model, **hints):
"""Send all read operations on 'app_label' app models to associated db"""
if model._meta.app_label == 'testapp1':
return 'ta1_db'
if model._meta.app_label == 'testapp2':
return 'ta2_db'
return None
def db_for_write(self, model, **hints):
"""Send all write operations on 'app_label' app models to associated db"""
if model._meta.app_label == 'testapp1':
return 'ta1_db'
if model._meta.app_label == 'testapp2':
return 'ta2_db'
return None
def allow_relation(self, obj1, obj2, **hints):
"""Determine if relationship is allowed between two objects."""
# Allow any relation between two models that are in the same app.
if obj1._meta.app_label == 'testapp1' and obj2._meta.app_label == 'testapp1':
return True
if obj1._meta.app_label == 'testapp2' and obj2._meta.app_label == 'testapp2':
return True
# No opinion if neither object is in the Example app (defer to default or other routers).
elif 'testapp1' not in [obj1._meta.app_label, obj2._meta.app_label] and 'testapp2' not in [obj1._meta.app_label, obj2._meta.app_label]:
return None
# Block relationship if one object is in the Example app and the other isn't.
return False
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""Ensure that the 'app_label' app's models get created on the right database."""
if app_label == 'testapp1':
return db == 'ta1_db'
if app_label == 'testapp2':
return db == 'ta2_db'
elif db == 'default':
# Ensure that all other apps don't get migrated on the example_db database.???
return False
# No opinion for all other scenarios
return None
(allow_migrate中のelif()私が正しいかはわからない。allow_relationでもelifの()。私はこれらの例を適用しました)
私はtestapのモデルを登録しましたp1とtestapp2を自分のadmin.pyに入れて管理ページに表示します。この時点でデータの追加/削除は正常です。
事前に感謝します。
あなたのご意見は?共通のものは、単一のスキーマの複数のコピーを格納することである。それぞれが独自の独立したストレージを持つ複数のクライアントをサポートします。それがあなたの目標なら、あなたは['django-tenants'](https://github.com/tomturner/django-tenants)のようなものを考えるかもしれません。 – Chris
私は自分のDjango/gunicorn/nginxサイトをホストしていますが、Lightroomデータベース(sqlite3、読み取り専用 - 私はこれを文書化するかもしれません)ベースのアプリケーションをホストする必要から、単一のプロジェクトが生成されています。私の意図は、サイトを変更し、単一のプロジェクト構造を維持し、異なるもの(別々のLrを追加)用に別々のアプリケーションを用意することです。私はそれが複数のプロジェクトを持っている可能性があり、それらをルーティングするためにnginxを使用するが、私は各サイト(非常に低いクライアント数)のアプリを使用したい。私が気に入っているさまざまなdb型があるかもしれません。Postgresは例として使用されています。 – Rasta