- у вас 5 столбцов, следовательно, 5 переменных связывания. Ваш шаблон вставки слишком сложен
- с любыми операциями с базой данных, которые вы должны работать с партиями, а не строка за строкой. Вам действительно следует использовать
execute many()
- Я предполагаю, что ohl c равно JSON, просто нужно преобразовать его в строку
import mysql.connector
import json
from datetime import datetime
conn = mysql.connector.connect(host="127.0.0.1",user="sniffer",passwd="sniffer",database="sniffer")
curr = conn.cursor()
try: curr.execute("drop table ticks")
except: pass
curr.execute("create table ticks (last_price double, date datetime, Volume double, ins_token varchar(20), ohlc json)")
ohlc = {'open': 22719.25, 'high': 22880.0, 'low': 22665.4, 'close': 22610.75}
ticks = [{"last_price": 100.2, "timestamp":str(datetime.now()), "volume":30,
"instrument_token":"APPL", "ohlc":ohlc}]
ins = "insert into ticks(last_price,date,Volume,ins_token,ohlc) values(%s, %s, %s, %s, %s)"
for tick in ticks:
curr.execute(ins, (tick["last_price"],
tick["timestamp"],
tick["volume"],
tick["instrument_token"],
json.dumps(tick["ohlc"])) )
curr.execute("select * from ticks")
curr.fetchall()
выход
[(100.2,
datetime.datetime(2020, 7, 11, 15, 51, 33),
30.0,
'APPL',
b'{"open": 22719.25, "high": 22880.0, "low": 22665.4, "close": 22610.75}')]