我有以下代码读取从左连接许多表形成的 MYSQL 选择命令。然后我想将结果写入另一个表。但是,当我这样做时(使用 Pandas),它可以正常工作并将数据添加到表中,但它会以某种方式破坏表中的所有索引,包括主键。
这是代码:
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" 才会出现问题。