Dynamische Modellerstellung für mehrere Tabellen in Django
Für eine Datenbank mit zahlreichen temporären Tabellen mit gemeinsamen Schemata und dynamischen Namen stellt die Integration von Django Herausforderungen dar . Es ist jedoch möglich, eine Factory-Funktion zum Erstellen von Modellen mit dynamischen Datenbanktabellen zu verwenden.
Dynamische Datenbanktabellenverwaltung
Die Factory-Funktion gibt ein Modell mit einer angegebenen Datenbank zurück Tisch. Dies ermöglicht eine dynamische Datenbindung basierend auf Tabellennamen:
def getModel(db_table):
class MyClass(models.Model):
# Model definition goes here...
class Meta:
db_table = db_table
return MyClass
Sie können dann das Modell mit dem spezifischen Tabellennamen instanziieren:
newClass = getModel('29345794_table')
newClass.objects.filter(...)
Metaklasse für dynamische Klassenbenennung
Da Django das _meta-Attribut der Klasse zwischenspeichert, ist eine Metaklasse erforderlich, um den Klassennamen zu ändern zur Laufzeit:
def getModel(db_table):
class MyClassMetaclass(models.base.ModelBase):
def __new__(cls, name, bases, attrs):
name = db_table
return models.base.ModelBase.__new__(cls, name, bases, attrs)
class MyClass(models.Model):
__metaclass__ = MyClassMetaclass
class Meta:
db_table = db_table
return MyClass
Zusätzliche Überlegungen
Obwohl die Datenbanktabelle ursprünglich als unveränderlich galt, kann sie dynamisch festgelegt werden:
MyModel._meta.db_table = '10293847_table'
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3