Ich baue eine Website unter Django Framework, diese Website muss verschiedene SQL-Schemas haben, für jetzt habe ich erfolgreich erstellt alle Schemata und alle Sachen, aber ich verstehe nicht, warum die Tabelle django_migrations ist in jedem Schema nach der Migration von Datenbanken.Warum ist django_migrations Tabelle in allen Datenbanken
Erwartete Datenbanken Inhalt:
AppDB Tabellen sind alle Modelle von dieser App definiert
Standard DB-Tabellen sind alle Django Tabellen (admin, Content, Auth, Sitzungen)
Datenbankinhalt:
AppDB Tabellen sind alle Modelle von dieser App + django_migrations definiert
STANDARD Tabellen werden alle Django Tabellen (admin, Content, Auth, Sitzungen) + django_migrations
Das sind die Router von die 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
Danke.
Ich denke, dass Sie nicht verstanden haben, was ich gefragt habe, ist meine Frage, Ich habe 2 db, sollte eine Django Informationen enthalten, und die andere sollte nur Daten für meine Anwendungen enthalten. Wenn ich das Projekt migrieren erstellt es die django_migrations Tabelle in beiden db mit den gleichen Daten, habe ich versucht fast alles um das zu vermeiden, aber nichts hat mir geholfen –
@NadirAlbajari: Es ist nicht möglich. Die anderen Tabellen, die du erwähnt hast, sind nur optionale Apps und können überall platziert werden. Die Migrationstabelle ist nicht optional. Sie muss in jeder Datenbank vorhanden sein, damit sie verfolgen kann, welche Migrationen auf diese Datenbank angewendet wurden. –
Danke @Kevin, ich verstehe das, aber unter der Annahme, dass ich 2 Apps (app1, app2) und 2 Datenbanken (db1, db2) habe, möchte ich die zugehörigen Migrationen für app1 in db1 und das gleiche für app2 in db2 haben. Die Migrationstabelle in db1 enthält jedoch die Migrationen für die beiden Apps und die gleichen für db2. Gibt es einen guten Grund, warum dies passiert? Gibt es eine Möglichkeit, die Migrationen für 2 Apps zu trennen? Danke nochmal !! –