Как отдельно вставить значения из массива в строку sqlite3
У меня есть функция которая передаёт название таблицы и массив из 5 элементов, когда я пытаюсь передать массив то sqlite ругается что я передаю всего 2 элемента когда нужно 6. Есть ли какой-то способ записать массив по отдельности в каждую строчку не создавая кучу переменных? Заранее спасибо
async def add_item(ctg, info):
with sqlite3.connect('db_items.db') as db:
print(info)
cursor = db.cursor()
cursor.execute(f"SELECT id FROM {ctg}")
id = int(cursor.fetchall()[-1][0])# Это последний предмета в БД, он кастомный так-что вместо PRIMARY KEY я использую TEXT
print(id)
print(info)
cursor.execute(f"INSERT INTO {ctg} VALUES(?, ?, ?, ?, ?, ?)", (str(id+1), [info]))# Вот тут я передаю одну переменную и массив, и тут ругается sqlite
db.commit()
Ответы (2 шт):
Автор решения: White Marlin
→ Ссылка
Если вы хотите добавить новую запись, это делается примерно так.
con = sqlite3.connect('db_items.db')
def add_item(ctg, info: list):
cur = con.cursor()
cur.execute(f"INSERT INTO {ctg} (col_name, col_name, col_name, col_name, col_name, col_name) VALUES (?, ?, ?, ?, ?, ?)", (info[0], info[1], info[2], info[3], info[4], info[4], info[5])
con.commit()
cur.close()
Автор решения: catmoska
→ Ссылка
Чтобы не писать это:
info[0], info[1], info[2], info[3], info[4], info[4], info[5]'
можно сделать так:
cur.execute(f"INSERT INTO {ctg} (col_name, col_name, col_name, col_name, col_name, col_name)
VALUES (?, ?, ?, ?, ?, ?)", tuple(info))