我下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个应用程序的迁移分开吗? 再次感谢! –