automap_basefrom sqlalchemy.ext.automap(tableNamesDict は Pandas テーブルのみの dict です):
metadata = MetaData()
metadata.reflect(db.engine, only=tableNamesDict.values())
Base = automap_base(metadata=metadata)
Base.prepare()
1 つの問題を除いて、これは完全に機能しますが、automap ではテーブルに主キーが必要です。わかりました、問題ありません。パンダto_sqlには主キーを示す方法があると確信しています...いいえ。これは少しハッキーになるところです:
for df in dfs.keys():
cols = dfs[df].columns
cols = [str(col) for col in cols if 'id' in col.lower()]
schema = pd.io.sql.get_schema(dfs[df],df, con=db.engine, keys=cols)
db.engine.execute('DROP TABLE ' + df + ';')
db.engine.execute(schema)
dfs[df].to_sql(df,con=db.engine, index=False, if_exists='append')
dictofを反復処理し、主キーに使用する列 (つまり、 を含むもの)DataFramesのリストを取得し、 を使用して空のテーブルを作成し、テーブルに を追加します。idget_schemaDataFrame
モデルができたので、明示的に名前を付けて使用するか (つまりUser = Base.classes.user)、session.query次のような方法ですべてのクラスの辞書を作成することができます。
alchemyClassDict = {}
for t in Base.classes.keys():
alchemyClassDict[t] = Base.classes[t]
そしてクエリ:
res = db.session.query(alchemyClassDict['user']).first()