2

我有以下代码读取从左连接许多表形成的 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" 才会出现问题。

4

0 回答 0