Добавить список словарей в БД sqlite3 python
Пытаясь освоить работу с БД столкнулся с проблемой уложить список словарей в файл формата db. Пробовал как текст выдаёт ошибку.
sqlite3.OperationalError: no such column:
with sqlite3.connect('new_.db') as db:
cursor = db.cursor()
query = """
CREATE TABLE active
(price_bue TEXT)
"""
cursor.execute(query)
query = f''' INSERT INTO active VALUES ({str(data)})'''
cursor.execute(query)
db.commit()
Пробовал преобразовав в байты, так же получаю ошибку.
sqlite3.OperationalError: table active already exists
with sqlite3.connect('new_.db') as db:
cursor = db.cursor()
query = """
CREATE TABLE active
(price_bue BLOB)
"""
cursor.execute(query)
query = f''' INSERT INTO active VALUES ({dumps(data).encode('utf-8')})'''
cursor.execute(query)
db.commit()
Данные которые нужно записать:
data = [{'price': 588.4, 'quantity': 0.0086, 'actual cost': 5.065300239999999},
{'price': 589.2, 'quantity': 0.0086, 'actual cost': 5.07218712},
{'price': 590.0, 'quantity': 0.0086, 'actual cost': 5.079073999999999},
{'price': 590.8, 'quantity': 0.0086, 'actual cost': 5.08596088},
{'price': 591.7, 'quantity': 0.0086, 'actual cost': 5.093708620000001},
{'price': 592.6, 'quantity': 0.0086, 'actual cost': 5.101456359999999},
{'price': 593.5, 'quantity': 0.0086, 'actual cost': 5.1092040999999995}]
Ответы (2 шт):
Автор решения: Oopss
→ Ссылка
Поле, по которому выбирать запись, есть же, да?
import sqlite3
data = [{'price': 588.4, 'quantity': 0.0086, 'actual cost': 5.065300239999999},
{'price': 589.2, 'quantity': 0.0086, 'actual cost': 5.07218712},
{'price': 590.0, 'quantity': 0.0086, 'actual cost': 5.079073999999999},
{'price': 590.8, 'quantity': 0.0086, 'actual cost': 5.08596088},
{'price': 591.7, 'quantity': 0.0086, 'actual cost': 5.093708620000001},
{'price': 592.6, 'quantity': 0.0086, 'actual cost': 5.101456359999999},
{'price': 593.5, 'quantity': 0.0086, 'actual cost': 5.1092040999999995}]
with sqlite3.connect('new_.db') as db:
cursor = db.cursor()
query = """
CREATE TABLE IF NOT EXISTS active
(price_bue TEXT)
"""
cursor.execute(query)
query = f''' INSERT INTO active VALUES (?)'''
cursor.execute(query,(str(data),))
db.commit()
res= cursor.execute('select * from active').fetchone()
print(res)
("[{'price': 588.4, 'quantity': 0.0086, 'actual cost': 5.065300239999999}, {'price': 589.2, 'quantity': 0.0086, 'actual cost': 5.07218712}, {'price': 590.0, 'quantity': 0.0086, 'actual cost': 5.079073999999999}, {'price': 590.8, 'quantity': 0.0086, 'actual cost': 5.08596088}, {'price': 591.7, 'quantity': 0.0086, 'actual cost': 5.093708620000001}, {'price': 592.6, 'quantity': 0.0086, 'actual cost': 5.101456359999999}, {'price': 593.5, 'quantity': 0.0086, 'actual cost': 5.1092040999999995}]",)
TEXT это ваш выбор, можете и BLOB использовать,
import json
#raise TypeError(f'the JSON object must be str, bytes or bytearray, '
#TypeError: the JSON object must be str, bytes or bytearray, not tuple
#Expecting property name enclosed in double quotes По этому
res = res[0].replace("'", '"')
l_dict=json.loads(res)
for i in l_dict:
print(i)
{'price': 588.4, 'quantity': 0.0086, 'actual cost': 5.065300239999999}
{'price': 589.2, 'quantity': 0.0086, 'actual cost': 5.07218712}
{'price': 590.0, 'quantity': 0.0086, 'actual cost': 5.079073999999999}
{'price': 590.8, 'quantity': 0.0086, 'actual cost': 5.08596088}
{'price': 591.7, 'quantity': 0.0086, 'actual cost': 5.093708620000001}
{'price': 592.6, 'quantity': 0.0086, 'actual cost': 5.101456359999999}
{'price': 593.5, 'quantity': 0.0086, 'actual cost': 5.1092040999999995}
Автор решения: ganz
→ Ссылка
Мб с модулем
import sqlalchemy
engine = sqlalchemy.create_engine("sqlite:///:memory:", echo=True)
#dialect[+driver]://user:password@host/dbname
engine.table_names()
#['table']
conn = engine.connect()
meta = sqlalchemy.MetaData()
table = sqlalchemy.Table(
'table', meta,
sqlalchemy.Column('culumn_name', sqlalchemy.String) #maybe need price,quantity, actual cost то есть создать три столбца?
)
meta.create_all(engine)
#CREATE TABLE "table" (column_name VARCHAR, PRIMARY KEY (id))
conn.execute(table.insert(), [{"column_name":'Beta'}])#то есть вставляет список словарей соответсвующих структуре таблицы