Achilles72
@Achilles72

Как решить ошибку при создание базы данных 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.
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
vesper-bot
@vesper-bot
Любитель файрволлов
Создайте таблицу с флагом AUTO_INCREMENT в колонке id. Ваша форма об id не знает и не должна, поэтому и передает 4 значения в INSERT, а из-за необходимости указать полный список VALUES в вызове вам пришлось рисовать 5 вопросов вместо 4. На это указывает ошибка.
PS: точный синтаксис автоинкремента для sqlite смотрите сами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы