我有以下代码,它读取由左连接多个表形成的MYSQL select命令。然后我想把结果写到另一个表。然而,当我这样做时(使用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”才会出现问题。