Bei der Arbeit mit MySQL-Datenbanken ist es möglich, mehrere temporäre Tabellen mit identischen Schemata, aber dynamischen Namen zu haben. Um mit diesen Tabellen in Django zu interagieren, können Sie eine Factory-Funktion verwenden, die Modelle mit einem angegebenen db_table-Wert generiert.
Der folgende Code zeigt, wie ein Modell dynamisch basierend auf erstellt wird ein Datenbanktabellenname:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Define model fields here... class Meta: db_table = db_table return MyClass</code>
Durch den Aufruf von getModel(db_table) erhalten Sie ein Modell, das den angegebenen db_table-Namen verwendet. Um beispielsweise Daten aus der Tabelle 29345794_table abzurufen, können Sie Folgendes verwenden:
<code class="python">newClass = getModel('29345794_table') results = newClass.objects.filter(...)</code>
Zunächst speichert Django die Metaklasseninformationen für jede Klasse basierend auf ihrem Namen zwischen . Um diese Einschränkung zu umgehen, können Sie eine benutzerdefinierte Metaklasse verwenden, die den Klassennamen zur Laufzeit ändert:
<code class="python">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</code>
Anstatt jedes Mal neue Modelle zu erstellen, können Sie dies tun Ändern Sie dynamisch das db_table-Attribut eines vorhandenen Modells:
<code class="python">MyModel._meta.db_table = '10293847_table' results = MyModel.objects.all()</code>
Mit diesem Ansatz können Sie dynamisch zwischen verschiedenen Tabellennamen für dasselbe Modell wechseln.
Das obige ist der detaillierte Inhalt vonWie interagiere ich mit mehreren temporären Tabellen mit identischen Schemata in Django?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!