order_id не сохраняется в БД (sqlite3, aiogram)
Мейн-код:
from aiogram import Bot, Dispatcher, types, executor
from aiogram.types import CallbackQuery
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
import keyboards
from database import Database
from config import BOT_TOKEN, admin_id
from aiogram.dispatcher.filters.state import State, StatesGroup
class Answer(StatesGroup):
sended = State()
answer = State()
bot = Bot(token=BOT_TOKEN, parse_mode='HTML')
dp = Dispatcher(bot, storage=MemoryStorage())
db = Database('database.db')
@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
if (not db.user_exists(message.from_user.id)):
await bot.send_message(admin_id, f'Зашел новый пользователь: @{message.from_user.username}')
db.add_user(message.from_user.id)
await message.answer('<b>👋 Привет!</b>\n\nЧтобы воспользоваться ботом, нажимай на кнопки ниже.',
reply_markup=keyboards.main_keyboard)
@dp.message_handler(content_types=['text'])
async def cmd_commands(message: types.Message):
if message.text == '🎯 Получить товар':
await message.answer('Пожалуйста, напишите ID заказа (<b>введите только цифры</b>):')
await Answer.sended.set()
@dp.message_handler(state=Answer.sended)
async def cmd_sended(message: types.Message, state: FSMContext):
order_id = int(message.text)
await state.update_data(
{
'order_id': order_id
}
)
await message.answer('<b>Ваша заявка была отправлена администратору, ожидайте выдачи</b>')
db.set_user_text(message.from_user.id, order_id)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
БД-файл:
import sqlite3
class Database:
def __init__(self, db_file):
self.connection = sqlite3.connect(db_file)
self.cur = self.connection.cursor()
def add_user(self, user_id):
with self.connection:
return self.cur.execute("""INSERT into 'info' ('user_id') VALUES (?)""", (user_id,))
def user_exists(self, user_id):
with self.connection:
result = self.connection.execute("""SELECT * FROM "info" WHERE "user_id" = ?""", (user_id,)).fetchall()
return bool(len(result))
def set_user_text(self, user_id, order_id):
with self.connection:
return self.cur.execute("""UPDATE 'info' SET 'order_id' = ? WHERE 'user_id' = ?""",
(order_id, user_id,))
Когда пользователь вводит integer в боте, это число не сохраняется в ячейку "order_id" в БД.
Источник: Stack Overflow на русском