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 中国語 Web サイトの他の関連記事を参照してください。