Как реализовать передачу данных в sqlite3 через aiogram?
user.py
# Создаём класс для хранения стейтов
class Enter_data(StatesGroup):
login = State()
password = State()
note = State()
# Описание хендлера [/start]
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
await message.answer(f'Доброго времени суток, {message.chat.first_name} \n' '\n'
'Прежде чем мы начнём, прошу пройти авторизацию или минутную авторизацию' '\n' '\n'
'С уважением - Профессор Ботвинк', reply_markup= welcome_kb)
###### Описание хендлеров входа #######
# Первый хендрел входа
# Объявление стейта = None
@dp.message_handler(Text(equals='Вход'), state=None)
async def start_enter(message:types.Message):
await message.answer('Введите логин')
await Enter_data.login.set()
# Второй хендлер входа
# Передача ответа логина в state
@dp.message_handler(state = Enter_data.login)
async def stage_1(message: types.Message, state: FSMContext):
answer = message.text
async with state.proxy() as data:
data['login'] = answer
await message.answer('Введите пароль')
await Enter_data.next()
# Третий хендлер входа
# Передача пароля в state
@dp.message_handler(state= Enter_data.password)
async def stage_2(message: types.Message, state: FSMContext):
data = await state.get_data()
login = data.get('login')
password = message.text
await message.answer('Добро пожаловать, ' + login)
await state.finish()
# Регистрация хендреров для передачи в файл starting
def register_handlers(dp: Dispatcher):
dp.register_message_handler(start, commands = ['start'])
dp.register_message_handler(start_enter, Text(equals='Вход'))
dp.register_message_handler(stage_1, state= Enter_data.login)
dp.register_message_handler(stage_2, state= Enter_data.password)
database.py
import sqlite3
def sql_start():
global conn, cur
conn = sqlite3.connect('users.db')
cur = conn.cursor()
if conn:
print('Подключение в базам данных...')
print('База данных подключена')
else:
print('Не удалось подключится к базе данных')
cur.execute("""CREATE TABLE IF NOT EXISTS users(
user_id INTEGER,
login TEXT PRIMARY KEY NOT NULL,
password TEXT NOT NULL,
note TEXT NOT NULL
);
""")
conn.commit()
starting.py
from aiogram.utils import executor
from create import dp
from handler import user
from database import sql_start
# Вызов хендреров и базы данных из других файлов
async def connection_sql(_):
sql_start()
user.register_handlers(dp)
# Беспрерывный поллинг бота
executor.start_polling(dp, skip_updates=True, on_startup=connection_sql)
Вопрос заключается в том, как передать переменные user_id, login, password, note в БД sqlite3 и записать их там за определённым пользователем
upd. На данный момент надо записать только user_id, login, password.
Источник: Stack Overflow на русском