Как записать данные пользователя в базу данных sqlite
Сделал регистрацию путем установки состояний, в которых мы перехватываем ответы пользователя и записываем в переменные, после проработки всех состояний, мы записываем в бд информацию о пользователе. Проблема заключается в том, что как мне записать эти данные в бд при помощи orm sqlalcemy, и это должно происходить после кнопки завершить регистрацию, Помогите мне это сделать Вот мой код
User.py
import asyncio
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.filters import CommandStart
from aiogram.fsm.context import FSMContext
from app.database.requests import set_user, get_user, save_user_to_db
import app.keyboards as kb
from app.states import Description_problems, Registry
user = Router()
@user.message(F.text == "↩️ На главную")
@user.message(F.text == "↩️ Главная")
@user.message(F.text == "❌ Отмена")
@user.message(CommandStart())
async def cmd_start(message: Message, state: FSMContext):
await set_user(message.from_user.id)
await message.answer("Добро пожаловать в систему приёма заявок на ремонт и подключения конференций! ?\n\nЗдесь вы можете быстро отправить заявку на ремонт оборудования или запросить подключение конференции. Пожалуйста, выберите, что вы хотите сделать:", reply_markup=kb.application)
await state.clear()
@user.message(F.text == "Изменить учётные данные")
async def register(message: Message, state: FSMContext):
await state.set_state(Registry.name)
await message.answer("Введите ваше имя")
@user.message(Registry.name)
async def register_name(message: Message, state: FSMContext): # Здесь мы ловим состояние
await state.update_data(name=message.text)
await state.set_state(Registry.surname)
await message.answer("Отлично, теперь введите вашу фамилию")# Здесь мы выводим сообщение для того, чтобы пользователь знал какие данные ему надо вводить в бота
@user.message(Registry.surname)
async def register_name(message: Message, state: FSMContext):
await state.update_data(surname=message.text)
await state.set_state(Registry.patronymic)
await message.answer("Отлично, теперь введите ваше отчество")
@user.message(Registry.patronymic)
async def register_name(message: Message, state: FSMContext):
await state.update_data(patronymic=message.text)
await state.set_state(Registry.department)
await message.answer("Хорошо, теперь введите ваш отдел")
@user.message(Registry.department)
async def register_name(message: Message, state: FSMContext):
await state.update_data(department=message.text)
await state.set_state(Registry.office)
await message.answer("Хорошо, теперь введите ваш кабинет")
@user.message(Registry.office)
async def register_name(message: Message, state: FSMContext):
await state.update_data(office=message.text)
data = await state.get_data()# Здесь мы вытаскиваем все наши данные
await message.answer("Завершить регистрацию?", reply_markup=kb.YESandNOregistry)
await state.clear()
@user.message(F.text == "Да, завершить регистрацию ✅")
async def save_user(message: Message, state: FSMContext):
data = await state.get_data()
await save_user_to_db(data, message.from_user.id)
await message.answer("Регистрация успешно завершена",reply_markup=kb.home)
request.py
from app.database.models import async_session
from app.database.models import User, Application
from sqlalchemy import select, update, delete, desc
def connection(func):
async def inner(*args, **kwargs):
async with async_session() as session:
return await func(session, *args, **kwargs)
return inner
@connection
async def set_user(session, tg_id):
user = await session.scalar(select(User).where(User.tg_id == tg_id))
if not user:
session.add(User(tg_id=tg_id, name="User", surname="User", patronymic="User", department="No", office="No"))
await session.commit()
@connection
async def save_user_to_db(session, data, tg_id):
# Предположим, вы хотите найти пользователя по имени из данных
user = await session.scalar(select(User).where(User.name == "test"))
if not user:
# Если пользователь существует, обновляем его данные
await session.execute(
update(User).where(User.tg_id == tg_id).values(
name=data["name"],
surname=data['surname'],
patronymic=data['patronymic'],
department=data['department'],
office=data['office']
)
)
await session.commit()