データベーステーブルを利用しDjangoのダイナミック型操作

シーン解析:

MySQLバックエンドデータベースは、各テーブルには、各株式の毎日のデータに格納され、プレスティッカーという名前のデータテーブルを大量に保持しています。

stock_000002

stock_600030

stock_600020

... 3,000以上のテーブルの合計。

3,000人以上のテーブルがあるので、Djangoの。あなたはティッカーは、従来のORMモデルを使用して、各テーブルのデータを表示したい場合は、非常に困難になり、私たちは3000の以上のモデルを構築する必要があります。

 

ソリューション:

1.テーブル名、およびその他のフィールドは、ORMモデルに従って動的テーブルを作成します

デフ(名前、フィールド=なし、app_label = CREATE_MODEL '' モジュール= '' オプション=なし、管理者= なし):
     クラスのMeta:
         渡す
    場合:app_label 
        SETATTR(メタ、' app_label ' 、app_labelを)
     場合のオプションはありません ではないなし:
         のためのキー、値options.items():
            SETATTR(メタ、キー、値)
    ATTRS = { ' __module__ ':モジュール、' メタ' :メタ}
     もしフィールド:
        attrs.update(フィールド)
    继承models.Modelの
    戻り値の種類(名前、(models.Model、)、attrsに)

 

2.コールCREATE_MODELは、返さcustom_modelのORMモデルは、テーブルに対応しています

DEFのnew_stock(TAB_NAME):
     "" " 
    動的データモデルが作成され
    :PARAMのTAB_NAME:テーブル名
    :戻り:モデルクラス返し
    " "" 
    フィールド = {
         ' ts_code ':models.CharField(= 20 MAX_LENGTHある)、
         ' trade_date ':モデル。 CharFieldです(= 20はMAX_LENGTH、UNIQUE =であるとして、真)
         ' オープン' models.FloatField(ヌル= Falseの場合、デフォルト= 0.0: )、
         ' ハイ':models.FloatField(ヌル= Falseの、デフォルト= 0.0 )、
         ' ':モデル.FloatField(ヌル= Falseに、デフォルト= 0.0)、
         ' 閉じる':models.FloatField(ヌル= Falseを、デフォルト= 0.0 )、
         ' pre_close ':models.FloatField(ヌル= Falseを、デフォルト= 0.0 )、
         ' 変更':models.FloatField(ヌル= Falseを、デフォルト= 0.0 )、
         ' pct_chg ':models.FloatField(ヌル= Falseを、デフォルト= 0.0 )、
         ' 体積':models.FloatField(ヌル= Falseを、デフォルト= 0.0 )、
         ' ':models.FloatField(ヌル= Falseを、デフォルト= 0.0 
    } 
    オプション= { '発注':[ ' trade_date ' ]、' DB_Tableの' :TAB_NAME、} 
    custom_model = CREATE_MODEL(TAB_NAME、フィールド、オプション=オプション、app_label = ' 在庫'モジュール= ' stock.models ' 戻り custom_model

 

降順で日付別日々の在庫データ3. httpリクエスト。

DEFのstock_detail(要求、PK):
    TAB_NAME = ' stock_ ' + PK 
    stock_mod = new_stock(TAB_NAME) 

    クエリ
    IF request.method == ' GET ' 
        制限 = request.GET.get(' リミット' 
        オフセット = `` request.GET`` .get(' オフセット' #のクエリは、レコードの総数 
        =合計stock_mod.objects.count()

        #1 日付で降順に結果を 
        データリスト= stock_mod.objects.all()。ORDER_BY('-trade_date ')INT(オフセット):INT(オフセット)+の整数(限界)] 
        json_list = [] 

        インポートJSON
         返回JSON字符串
        データにおけるデータリスト:
            json_dict = model_to_dict(データ)
            json_list.append(json_dict)

        結果 = 辞書() = リスト()
        結果[ ' ' ] = 
        結果[ ' ' ] = json_list 

        logger.info('在庫リストを取得します" を返す)jsonResponse(結果、偽=安全を

HTTPリクエスト:/株式/ 000002 /オフセット= 0&リミット= 10をGET!

テーブル「stock_000002」に結合「stock_」と000002

オフセットデータは、スタート位置であります

戻りデータの数を制限します

テーブルルックアップによって得られたデータリストのデータがブラウザにJSON形式に編成します。

 

おすすめ

転載: www.cnblogs.com/bryant24/p/11445688.html