Как решить ошибку при создание базы данных sqlite3?
import sqlite3 as sq
from create import dp,bot
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from keyboards import kb_client
def sql_start():
global base, cur
base = sq.connect('pizza.db')
cur = base.cursor()
if base:
print('Data base connected OK!')
base.execute('CREATE TABLE IF NOT EXISTS menu(id INTEGER PRIMARY KEY,img TEXT, name TEXT , description TEXT, price TEXT)')
base.commit()
async def sql_add_command(state):
async with state.proxy() as data:
cur.execute("INSERT INTO menu VALUES (? , ? , ? , ? , ?)", tuple(data.values()))
base.commit()
async def sql_read(message):
for ret in cur.execute('SELECT * FROM menu').fetchall():
await bot.send_photo(message.from_user.id, ret[1], f'- Название:{ret[2]}\n \n- Описание: {ret[3]}\n \n - Цена: {ret[-1]} рублей')
async def sql_read2():
return cur.execute('SELECT * FROM menu').fetchall()
async def sql_delete_command(data):
cur.execute('DELETE FROM menu WHERE name = ?', (data,))
base.commit()
Ошибка: cur.execute("INSERT INTO menu VALUES (? , ? , ? , ? , ?)", tuple(data.values()))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 5, and there are 4 supplied.
А чему у тебя равно data.values() ? Вот как скажи по этой портянке можно догадаться что там внутри.
Там не то количество аргументов ясен пень. Про это и ошибка. Короче выбери или 4 или 5
какое число тебе больше нравиться.
И мог бы в консоли SQLite сначала проверить. А потом уже код писать на питонах.
Создайте таблицу с флагом AUTO_INCREMENT в колонке id. Ваша форма об id не знает и не должна, поэтому и передает 4 значения в INSERT, а из-за необходимости указать полный список VALUES в вызове вам пришлось рисовать 5 вопросов вместо 4. На это указывает ошибка.
PS: точный синтаксис автоинкремента для sqlite смотрите сами.