Ошибка при занесении словаря в базу данных 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'}