我下Django框架建設一個網站,這個網站需要有不同的SQL計劃django_migrations表,現在我成功創建的所有計劃和所有的東西,但我不明白爲什麼表django_migrations在數據庫遷移後的每個模式中。爲什麼在所有數據庫中
預計數據庫中的內容:
AppDB表是
默認的數據庫表都是Django的表中定義的所有車型(管理員,CONTENTTYPES,身份驗證,會話)
數據庫內容:
個
AppDB表是所有通過這個程序定義+模型django_migrations
DEFAULT表所有Django的表(管理員,CONTENTTYPES,AUTH,會話)+ django_migrations
那些是的路由器2 dbs:
class DefaultRouter(object):
APPS = ['auth', 'sessions', 'admin', 'contenttypes']
DB = 'default'
def db_for_read(self, model, **hints):
if model._meta.app_label in self.APPS:
return self.DB
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.APPS:
return self.DB
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label in self.APPS or obj2._meta.app_label in self.APPS:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.APPS:
return db == self.DB
return None
class MyAppDBRouter(object):
def db_for_read(self, model, **hints):
return self.check_app_label(model)
def db_for_write(self, model, **hints):
return self.check_app_label(model)
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'myapp':
return db == 'appdb'
return None
@staticmethod
def check_app_label(model):
if model._meta.app_label == 'myapp':
return 'appdb'
return None
謝謝。
我認爲你不明白我的要求,我的問題是這樣的, 我有2分貝,一個應該包括django信息,另一個應該只包括我的應用程序的數據。 當我遷移項目時,它在兩個數據庫中創建django_migrations表,使用相同的數據,我儘量避免這種情況,但沒有幫助我 –
@NadirAlbajari:這是不可能的。您提到的其他表格只是可選應用程序,可以放在任何地方。遷移表不是可選的,它必須存在於每個數據庫上,以便它可以跟蹤在該數據庫上應用了哪些遷移。 –
謝謝@Kevin,我明白這一點,但假設我有2個應用程序(app1,app2)和2個數據庫(db1,db2),我想要在db1中爲app1進行相關遷移,而在db2中爲app2執行相同的遷移。但是db1中的遷移表包含2個應用程序的遷移,而對於db2則包含遷移。 爲什麼發生這種情況有一個很好的理由嗎?有什麼辦法可以將2個應用程序的遷移分開嗎? 再次感謝! –