Добавить список словарей в БД 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'}])#то есть вставляет список словарей соответсвующих структуре таблицы
→ Ссылка