Имам следния код, който чете команда за избор на 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 метод променя схемата на sqlite tables предполага, че чрез използване на sqlalchemy двигател може потенциално да реши проблема.
Редактиране:
Когато използвам if_exists="append", проблемът не се появява, проблемът възниква само с if_exists="replace".
to_sql
. Най-доброто решение е само да добавите и да създадете таблицата с правилните първични ключове по друг начин. - person joris   schedule 16.06.2015