Как редактировать записи в Sqlite телеграм бота Aiogram
Есть бот на aiogram с бд sqlite. Через машину состояний я создаю объект в базе данных . Потом могу вывести их всех . Но как реализовать редактирование объектов ? В данном случае это пицца, у неё есть фото, название, цена и описание. Как можно реализовать форму редактирования или каким образом вводить новые значения. Для примера изменить цену. Или так не делают на практике ? Возможно есть бот и сайт пицерии и они имеют общюю БД? Буду благодарен за любую информацию.
class FSMAdmin(StatesGroup):
photo = State()
name = State()
description = State()
price = State()
@dp.message_handler(text='Загрузить')
async def cm_start(message : types.Message):
if message.from_user.id == ID:
await FSMAdmin.photo.set()
await message.reply('Загрузить фото ')
async def load_name(message : types.Message, state: FSMContext):
if message.from_user.id == ID:
async with state.proxy() as data:
data['name'] = message.text
await FSMAdmin.next()
await message.reply('Описание:')
async def load_description(message : types.Message, state: FSMContext):
async with state.proxy() as data:
data['description'] = message.text
await FSMAdmin.next()
await message.reply('Укажите цену:')
async def load_price(message : types.Message, state: FSMContext):
async with state.proxy() as data:
if message.text.isdigit():
data['price'] = float(message.text)
else:
await bot.send_message(message.from_user.id, 'укажите корректную цену ')
await sqlite_db.sql_add_command(state)
await state.finish()
await bot.send_message(message.from_user.id, 'Добавлено.')
#Это sqlite
def sql_start():
global base, cur
base = sq.connect('pizza_menu.db')
cur = base.cursor()
if base:
print('connect to database - successful')
base.execute('CREATE TABLE IF NOT EXISTS menu(img TEXT, name TEXT PRIMARY KEY, 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[0], f'{ret[1]}\nОписание: {ret[2]}\nЦена {ret[-1]}')
async def sql_read2():
return cur.execute('SELECT * FROM menu').fetchall()
#отображаются все объекти
@dp.message_handler(text=['Меню'])
async def pizza_menu_command(message : types.Message):
await sqlite_db.sql_read(message)
Ответы (2 шт):
Общение с телеграм - это один слой логики.
Общение с базой данных - другой слой логики.
FSM служит для хранения состояний, а не для работы с базой данных
Попробуйте использовать ORM для работы с бд, к примеру Django ORM или SQLAlchemy