2017-08-05 10 views
-2

starting_pitchersというテーブルがあります。私はそのテーブルの統計データを使って、​​と呼ばれる個別のpythonファイルで複合ランキングを作成しました。関数から返された辞書を使用してsqlalchemyで新しいテーブルを作成する方法

複合ランキングは、キーが投手の名前(元のテーブルの一意の列)であり、値が他の統計情報の組み合わせを表す浮動小数点の辞書です。 average.pyファイルで、名前(辞書キー)が元のテーブルの名前列と一致し、それに応じて値を挿入する複合値からなる元のテーブルに新しい列を作成するにはどうすればよいですか? **を使用

from flask_sqlalchemy import SQLAlchemy 
from models import starting_pitchers 
from db import db 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from main import app 

engine = create_engine('mysql+pymysql://baseball:[email protected]:8889/baseball', echo=True) 



def average(): 
    CFIP_sort_list = [] 
    for i in starting_pitchers.query.order_by('CFIP asc'): 
     CFIP_sort_list.append(i) 
    xFIP_sort_list = [] 
    for ii in starting_pitchers.query.order_by('xFIP asc'): 
     xFIP_sort_list.append(ii) 
    FIP_sort_list = [] 
    for iii in starting_pitchers.query.order_by('FIP asc'): 
     FIP_sort_list.append(iii) 
    KperBB_sort_list = [] 
    for iv in starting_pitchers.query.order_by('KperBB desc'): 
     KperBB_sort_list.append(iv) 
    Total_Ks_sort_list = [] 
    for v in starting_pitchers.query.order_by('Total_Ks desc'): 
     Total_Ks_sort_list.append(v) 
    WHIP_sort_list = [] 
    for vi in starting_pitchers.query.order_by('WHIP asc'): 
     WHIP_sort_list.append(vi) 
    ERA_sort_list = [] 
    for vii in starting_pitchers.query.order_by('ERA asc'): 
     ERA_sort_list.append(vii) 
    IP_sort_list = [] 
    for viii in starting_pitchers.query.order_by('Innings_Pitched desc'): 
     IP_sort_list.append(viii) 
    Wins_sort_list = [] 
    for ix in starting_pitchers.query.order_by('Wins desc'): 
     Wins_sort_list.append(ix) 
    QS_Rate_sort_list = [] 
    for x in starting_pitchers.query.order_by('Quality_Start_Rate desc'): 
     QS_Rate_sort_list.append(x) 
    GB_Rate_sort_list = [] 
    for xi in starting_pitchers.query.order_by('Ground_Ball_Rate desc'): 
     GB_Rate_sort_list.append(xi) 
    SC_Rate_sort_list = [] 
    for xii in starting_pitchers.query.order_by('Soft_Contact_Rate desc'): 
     SC_Rate_sort_list.append(xii) 
    FP_Rank_sort_list = [] 
    for xiii in starting_pitchers.query.order_by('FP_Rank asc'): 
     FP_Rank_sort_list.append(xiii) 
    SW_Rank_sort_list = [] 
    for xiii in starting_pitchers.query.order_by('SW_Rank asc'): 
     SW_Rank_sort_list.append(xiii) 
    CT_Rank_sort_list = [] 
    for xiv in starting_pitchers.query.order_by('CT_Rank asc'): 
     CT_Rank_sort_list.append(xiv) 
    HC_Rank_sort_list = [] 
    for xv in starting_pitchers.query.order_by('HC_Rank asc'): 
     HC_Rank_sort_list.append(xv) 

    Sorted_avg_dict = {} 

    for o in CFIP_sort_list: 

     index_collector = (3 * CFIP_sort_list.index(o)) 
     if o in xFIP_sort_list: 
      index_collector += xFIP_sort_list.index(o) 
     if o in FIP_sort_list: 
      index_collector += FIP_sort_list.index(o) 
     if o in KperBB_sort_list: 
      index_collector += KperBB_sort_list.index(o) 
     if o in Total_Ks_sort_list: 
      index_collector += Total_Ks_sort_list.index(o) 
     if o in WHIP_sort_list: 
      index_collector += WHIP_sort_list.index(o) 
     if o in ERA_sort_list: 
      index_collector += ERA_sort_list.index(o) 
     if o in IP_sort_list: 
      index_collector += IP_sort_list.index(o) 
     if o in Wins_sort_list: 
      index_collector += WHIP_sort_list.index(o) 
     if o in QS_Rate_sort_list: 
      index_collector += QS_Rate_sort_list.index(o) 
     if o in GB_Rate_sort_list: 
      index_collector += GB_Rate_sort_list.index(o) 
     if o in SC_Rate_sort_list: 
      index_collector += SC_Rate_sort_list.index(o) 
     if o in FP_Rank_sort_list: 
      index_collector += 3 * (FP_Rank_sort_list.index(o)) 
     if o in SW_Rank_sort_list: 
      index_collector += 3 * (SW_Rank_sort_list.index(o)) 
     if o in CT_Rank_sort_list: 
      index_collector += 3 * (SW_Rank_sort_list.index(o)) 
     if o in HC_Rank_sort_list: 
      index_collector += 3 * (HC_Rank_sort_list.index(o)) 

      Sorted_avg_dict[o.Name] = (index_collector/26) 

    print(Sorted_avg_dict) 

    return Sorted_avg_dict 

    def insert_column(): 

     name_values_list = [{'Chris Sale': 1.5, 'Corey Kluber':                         2.3076923076923075, 'Max Scherzer': 1.2692307692307692, 'Clayton Kershaw': 4.1923076923076925, 'Stephen Strasburg': 5.423076923076923, 
    'Zack Greinke': 4.423076923076923, 'Jacob Degrom': 5.115384615384615, 
'Yu Darvish': 6.346153846153846, 'Madison Bumgarner': 6.961538461538462, 'Jon Lester': 7.461538461538462}] 


    for name_value_dict in name_values_list: 
      starting_pitchers.insert().values(**name_value_dict) 

    if __name__ == "__main__": 
     db.app = app 
     average() 
     insert_column() 

model.py

from db import db 

class starting_pitchers(db.Model): 
    Name = db.Column(db.String(80), unique=True) 
    ID = db.Column(db.Integer, primary_key=True) 
    CFIP = db.Column(db.Integer) 
    xFIP = db.Column(db.Float) 
    FIP = db.Column(db.Float) 
    KperBB = db.Column(db.Float) 
    Total_Ks = db.Column(db.Integer) 
    WHIP = db.Column(db.Float) 
    ERA = db.Column(db.Float) 
    Innings_Pitched = db.Column(db.Float) 
    Wins = db.Column(db.Integer) 
    Quality_Start_Rate = db.Column(db.Integer) 
    Ground_Ball_Rate = db.Column(db.Float) 
    Soft_Contact_Rate = db.Column(db.Float) 
    FP_Rank = db.Column(db.Integer, unique=True) 
    SW_Rank = db.Column(db.Integer) 
    CT_Rank = db.Column(db.Integer) 
    HC_Rank = db.Column(db.Integer) 
    Composite_Rank = db.Column(db.Float) 

    def __init__(self, Name, CFIP, xFIP, FIP, KperBB, Total_Ks, WHIP, ERA, Innings_Pitched, Wins, Quality_Start_Rate, 
       Ground_Ball_Rate, Soft_Contact_Rate, FP_Rank, SW_Rank, CT_Rank, HC_Rank, Composite_Rank): 
     self.Name = Name 
     self.CFIP = CFIP 
     self.xFIP = xFIP 
     self.FIP = FIP 
     self.KperBB = KperBB 
     self.Total_Ks = Total_Ks 
     self.WHIP = WHIP 
     self.ERA = ERA 
     self.Innings_Pitched = Innings_Pitched 
     self.Wins = Wins 
     self.Quality_Start_Rate = Quality_Start_Rate 
     self.Ground_Ball_Rate = Ground_Ball_Rate 
     self.Soft_Contact_Rate = Soft_Contact_Rate 
     self.FP_Rank = FP_Rank 
     self.SW_Rank = SW_Rank 
     self.CT_Rank = CT_Rank 
     self.HC_Rank = HC_Rank 
     self.Composite_Rank = Composite_Rank 

答えて

0
name_values_list = [{'name': 'abcd', 'value': 2.3}, {'name': 'xyz', 'value': 1.0}] 
for name_value_dict in name_values_list: 
    table_name.insert().values(**name_value_dict) 

insertメソッドに引数としてnamevalueを渡すために辞書をアンパック。

+0

トレースバック(最新の呼び出しの最後): insert_column()insert_columnで ファイル "average.py"、ライン109、 starting_pitchers.insert()内 ファイル "average.py"、ライン115、値(。 ** name_value_dict) AttributeError:型オブジェクト 'starting_pitchers'に属性 'insert'がありません –

+0

トレースバックが私にこれをくれました^^ –

+0

'starting_pitchers'をどのように初期化したのか投稿できますか? –

関連する問題