У меня есть код:
import pandas as pd
from sqlalchemy import create_engine
data=[[18:04:23, 24, 0.63790, 45, 892]
[18:12:27, 32, 0.54881, 36, 701]
[18:34:34, 46, 0.45972, 27, 610]
[18:59:56, 02, 0.36363, 08, 529]
[18:59:56, 02, 0.36363, 08, 529]
[18:59:56, 02, 0.36363, 08, 529]
[18:59:56, 02, 0.36363, 08, 529]
[19:06:23, 67, 0.27054, 99, 438]
[19:23:43, 56, 0.18145, 80, 347]
[19:32:45, 99, 0.09236, 71, 256]
[19:43:12, 13, 0.90327, 62, 165]
[19:43:12, 13, 0.90327, 62, 165]
[20:04:00, 24, 0.81418, 53, 074]
[20:38:24, 54, 0.72509, 44, 983]
[20:47:46, 75, 0.63690, 35, 892]
[21:04:59, 83, 0.54781, 26, 701]
[06:04:23, 67, 0.52342, 26, 345]]
db_connection = 'mysql+pymysql://AAA:OOO@localhost/PPAP'
conn = create_engine(db_connection)
for i in data:
pd.read_sql('INSERT IGNORE test (Time,ID,X,Y) VALUES(%s,%s,%s,%s)' % (i[0],i[1],i[2],i[3]), conn)
Код должен просто вставлять в бд данные, однако возникает следующая ошибка: ResourceClosedError: This result object does not return rows. It has been closed automatically.
По какой-то мне неведомой причине это происходит именно в питоне. Подскажите пожалуйста в чем проблема.
pd.read_sql
предназначен для того, чтобы читать данные из базы. Чтобы складывать данные в базу, используйте pandas.DataFrame.to_sql
.
При этом обратите внимание на то, как он работает: ссылка на документацию
Этот метод вызывается у датафрейма, и он просто выгружает все данные в соответствующие колонки одной таблицы. Соответственно, нужно будет ваши данные сначала уложить в датафрейм.
Но, на самом деле, вообще не понятно, зачем вам здесь пандас. Вы можете просто использовать conn.execute
, чтобы выполнить ваш запрос.
UPD: По вашему вопросу в комментариях - попробуйте вот так:
db_connection = 'mysql+pymysql://AAA:OOO@localhost/PPAP'
engine = create_engine(db_connection)
conn = engine.connect()
# И дальше уже делаете ваши запросы через conn.execute
Лучше воспользоваться Pandas - код будет гораздо проще и понятнее и, скорее всего, работать будет быстрее по сравнению с рукописными циклами:
df = pd.DataFrame(data, columns=['Time','ID','X','Y','Z'])
df.to_sql('table_name', conn, if_exists='replace')
NOTE: В зависимости от ваших целей вам возможно придется указать другое значение для параметра if_exists
:
if_exists : {fail
, replace
, append
}, default fail
How to behave if the table already exists.
fail: Raise a ValueError.
replace: Drop the table before inserting new values.
append: Insert new values to the existing table.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Для кнопки с HTML документа надо написать функцию для JS React которая считывает информацию с input type="text" и записывает в такую переменную