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