Ошибка при занесении словаря в базу данных sqlite3 python

Пытаюсь внести в бд sqlite3 значения и получаю ошибку
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type
Понимаю, что ошибка во втором параметре, который является словарём. В python имею такую структуру:

db = sqlite3.connect('db.db')
cur = db.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS stickers_places (weapon_name TEXT, stickers BLOB)''')

cur.executemany('INSERT INTO stickers_places VALUES (weapon_name, stickers)', stickers_places)

db.commit()
db.close()

Словарь выглядит таким образом:

stickers_places = [
('AK-47', {
    0: 'normal',
    1: 'bad',
    2: 'normal',
    3: 'top',
}),
('M4A4', {
    0: 'normal',
    1: 'normal',
    2: 'top',
    3: 'bad',
}),
...
]

Что конкретно я делаю неправильно. Спасибо за помощь


Ответы (1 шт):

Автор решения: gil9red

Попробуйте словарь преобразовать в строку, из строки получить байты (т.к. это BLOB) и их поместить

Думаю, так:

import json

...

for name, stickers in stickers_places:
    stickers_data = json.dumps(stickers)
    stickers_blob = sqlite3.Binary(stickers_data.encode('utf-8'))
    cur.execute('INSERT INTO stickers_places VALUES (weapon_name, stickers)', [name, stickers_blob])
...

Кст, у json ключи могут быть только строками, поэтому у того словаря ключи перестанут быть числами, если это важно, то можно через str сделать строку из словаря, а парсить через ast.

import json
print(json.dumps({
    0: 'normal',
    1: 'bad',
    2: 'normal',
    3: 'top',
}))
# {"0": "normal", "1": "bad", "2": "normal", "3": "top"}

print(str({
    0: 'normal',
    1: 'bad',
    2: 'normal',
    3: 'top',
}))
# {0: 'normal', 1: 'bad', 2: 'normal', 3: 'top'}

import ast
d = ast.literal_eval(str({
    0: 'normal',
    1: 'bad',
    2: 'normal',
    3: 'top',
}))
print(d)
{0: 'normal', 1: 'bad', 2: 'normal', 3: 'top'}
→ Ссылка