使用 MySQL 資料庫時,可能會有多個具有相同架構但動態名稱的臨時表。要與 Django 中的這些表進行交互,您可以使用工廠函數來產生具有指定 db_table 值的模型。
以下程式碼示範如何基於資料庫表名:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Define model fields here... class Meta: db_table = db_table return MyClass</code>
透過呼叫getModel(db_table),您可以取得使用指定db_table 名稱的模型。例如,要從表29345794_table 中檢索數據,您可以使用:
<code class="python">newClass = getModel('29345794_table') results = newClass.objects.filter(...)</code>
最初,Django 根據每個類別的名稱快取其元類別資訊.為了規避此限制,您可以使用在運行時修改類別名稱的自訂元類別:
<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>
您可以不必每次都建立新模型,而是可以動態修改現有模型的db_table 屬性:
<code class="python">MyModel._meta.db_table = '10293847_table' results = MyModel.objects.all()</code>
這種方法允許您在同一模型的不同表名之間動態切換。
以上是如何在 Django 中與具有相同模式的多個臨時表進行互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!