與Django 中的多個臨時表互動
使用包含共享相似架構但動態分配名稱的臨時表的MySQL 資料庫時,有必要在這些表和Django 之間建立一個介面。本文探討了利用單一 Django 模型從具有動態名稱的多個表格中檢索資料的可行性。
創建動態模型工廠
動態產生基於模型類別根據資料庫表名,可以建立工廠函數。工廠函數「getModel」將表名作為參數,並傳回具有動態「db_table」屬性的模型類別。例如:
def getModel(db_table): class MyClass(models.Model): # Define model fields here class Meta: db_table = db_table return MyClass
動態類別名稱的元類別方法
Django 中的「Meta」類別屬性通常是所有跨特定模型類別的實例化的共享實例。但是,透過定義自訂元類,我們可以在運行時更改類名。這允許我們為每個動態表名稱建立一個新類別。
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
動態修改'db_table' 屬性
或者,即使在定義模型類別之後也可以動態修改'db_table' 屬性:
MyModel._meta.db_table = '10293847_table'
透過利用這些技術,Django 可用於與多個臨時表交互,從而能夠從動態命名的表中檢索資料。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3