Django で同一のスキーマを持つ複数の一時テーブルを操作するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-25 06:33:29
オリジナル
880 人が閲覧しました

How to Interact with Multiple Temporary Tables with Identical Schemas in Django?

複数の一時テーブルに対する単一の Django モデル

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 設定

毎回新しいモデルを作成する代わりに、次のようにすることができます。既存のモデルの db_table 属性を動的に変更します:

<code class="python">MyModel._meta.db_table = '10293847_table'
results = MyModel.objects.all()</code>
ログイン後にコピー

このアプローチにより、同じモデルの異なるテーブル名を動的に切り替えることができます。

以上がDjango で同一のスキーマを持つ複数の一時テーブルを操作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!