Как реализовать передачу данных в sqlite3 через aiogram?

Рейтинг: 0Ответов: 1Опубликовано: 04.03.2023

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.

Ответы

▲ 0Принят
async def add_user_to_db(user_id, login, password):
    insert_query = f"INSERT INTO users (user_id, login, password) VALUES (?, ?, ?)"
    record_to_insert = (user_id, login, password)
    cur.execute(insert_query, record_to_insert)
    conn.commit()