使用 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中文网其他相关文章!