У меня есть кадр данных, который является агрегацией, в которой я пытаюсь вставить в базу данных MySQL. Данные выглядят следующим образом:
first last count type \
group
1 2018-01-12 00:00:00 2018-01-13 23:00:00 189 Received
2 2018-01-13 23:15:00 2018-01-14 00:00:00 4 Missed
3 2018-01-14 00:15:00 2018-01-14 23:45:00 95 Received
4 2018-01-15 00:00:00 2018-01-15 04:45:00 20 Missed
5 2018-01-15 05:00:00 2018-01-15 14:00:00 37 Received
6 2018-01-15 14:15:00 2018-01-15 14:45:00 3 Missed
7 2018-01-15 15:00:00 2018-01-15 15:45:00 4 Received
8 2018-01-15 16:00:00 2018-01-16 23:45:00 31 Missed
id
group
1 ABC123
2 ABC123
3 ABC123
4 ABC123
5 ABC123
6 ABC123
7 ABC123
8 ABC123
Когда я смотрю на тип данных, это указывает на то, что это кадр данных:
In [990]: type(result)
Out[990]: pandas.core.frame.DataFrame
Однако, когда я пытаюсь вставить данные в MySQL, я получаю следующую ошибку:
Failed processing format-parameters; Python 'series' cannot be converted to
a MySQL type
Вот код, который я использую для вставки:
for a, b in result.iterrows():
e_point = result['id'][[a]]
t = result['type'][[a]]
num = result['count'][[a]]
first = result['first'][[a]]
last = result['last'][[a]]
try:
cnx_insert = connector.connect(user='abc', password='abc',
host = 'blah',
port = '3306',
database='some_database')
except:
cnx_insert = connector.connect(user='abc', password='abc',
host = 'blah',
port = '3306',
database='some_database')
cursor_insert = cnx_insert.cursor()
try:
values = (id, type, count, first, last)
insert_query = ("INSERT INTO some_database.some_table"
"(id, message_status, read_intervals, first_reading_time,last_reading_time)"
"VALUES(%s, %s, %s, %s, %s)")
cursor_insert.execute(insert_query, values)
cnx_insert.commit()
except Exception as e:
print str(id)
print e
cnx_insert.close()
У меня никогда не возникало проблем с вставкой, и я пробовал делать множество вещей для решения таких задач, как превращение данных в список и кортеж.
Любая помощь приветствуется.
Я знаю, что вы используете коннектор для сохранения в mysql. Но почему так сложно? Вы можете легко использовать
df.to_sql(table_name, connection, if_exists='append', index=False)
для сохранения вашего фрейма данных.