多くのテーブルを結合する左から形成された MYSQL 選択コマンドを読み取る次のコードがあります。次に、結果を別のテーブルに書き込みたいと思います。ただし、(パンダを使用して)それを行うと、正しく機能し、データがテーブルに追加されますが、主キーを含むテーブルからすべてのインデックスが何らかの形で破棄されます。
コードは次のとおりです。
q = "SELECT util.peer_id as peer_id, util.date as ts, weekly_total_page_loads as page_loads FROM %s.%s as util LEFT JOIN \
(SELECT peer_id, date, score FROM %s.%s WHERE date = '%s') as scores \
ON util.peer_id = scores.peer_id AND util.date = scores.date WHERE util.date = '%s';"\
% (config.database_peer_groups, config.table_medians, \
config.database_peer_groups, config.db_score, date, date)
group_export = pd.read_sql(q, con = db)
q = 'USE %s;' % (config.database_export)
cursor.execute(q)
group_export.to_sql(con = db, name = config.table_group_export, if_exists = 'replace', flavor = 'mysql', index = False)
db.commit()
何か案は?
編集:
if_exists='replace' を使用すると、Pandas はテーブルを削除して再作成し、再作成してもインデックスを再構築しないようです。
さらに、この質問: to_sql pandas method changes the scheme of sqlite tables は、sqlalchemy エンジンを使用することで問題を解決できる可能性があることを示唆しています。
編集:
if_exists="append" を使用しても問題は発生しません。問題が発生するのは if_exists="replace" のみです。