シーン解析:
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形式に編成します。