Как в Python из базы данных sqlalchemy (orm) выбрать нужное поле нужного клиента?

Я новичёк в Python. Поставил себе тех. задание сделать простого бота в ТГ с БД sqlalchemy (orm). Никак не могу понять как вытянуть в переменную данные конкретного поля (например limit)? чтобы с ней поработать, изменить в зависимости от обстоятельств других полей и обновить в базе.

Вот рабочий код с которым я работаю: Это создание таблицы в БД

import os
from sqlalchemy import engine, BigInteger, String, MetaData
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.ext.asyncio import AsyncAttrs, async_sessionmaker, create_async_engine, 
AsyncSession

engine = create_async_engine(os.getenv('URLDB'))
session_maker = async_sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)
async_session = async_sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)

class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = 'users'

id: Mapped[int] = mapped_column(primary_key=True)
tg_id = mapped_column(BigInteger)
username: Mapped[str] = mapped_column(String(25))
date_t = mapped_column(BigInteger)
date_t2 = mapped_column(BigInteger)
limit: Mapped[int]
is_active: Mapped[bool]


async def async_main():
async with engine.begin() as conn:
    await conn.run_sync(Base.metadata.create_all)

Далее код функции, которая по полю, где записан ID Телеграм, определяет существует ли пользователь с таким ID. Если существует, то нужно вытянуть содержимое поля limit. Если не существует то создать запись в таблице с нужными данными

import time

from app.database.models import session_maker
from app.database.models import User
from sqlalchemy import select, update



async def set_user(tg_id, limit):
    async with session_maker() as session:
        user = await session.scalar(select(User).where(User.tg_id == tg_id))
        
ПОЛЬЗОВАТЕЛЬ ТАКОЙ ЕСТЬ, ПОЭТОМУ НУЖНО ПОЛУЧИТЬ ЧИСЛО ИЗ ПОЛЯ limit
 ЧТОБЫ ПРОДЕЛАТЬ С НИМ НЕКОТОРЫЕ ОПЕРАЦИИ, ПЕРЕДАТЬ В ДРУГУЮ ФУНКЦИЮ........

    if not user:
        print(tg_id)
        session.add(User(tg_id=tg_id, username=username,
                         date_t=time.time(), date_t2=time.time()+604800, limit=4, is_active=False))
        await session.commit()

Ответы (1 шт):

Автор решения: Алексей Рыженко

Перелопатив кучу информации нашел вот такой выход для реализации заданной цели. Может кому-то пригодится

Напомню, цель была получить содержимое конкретного поля из конкретного юзера. Затем это значение изменить и вернуть на место уже изменённым. Вот такой код получился:

async def find_limit(tg_id, dlt = 1):
async with session_maker() as session:
    result = await session.execute(select(User.limit).where(User.tg_id == tg_id)) # вытягиваем поле limit из конкретного id
    lim = (result.scalar_one_or_none()) - dlt # вычитаем 1 из полученного значения поля
    cursor = update(User).where(User.tg_id == tg_id).values(limit=lim) # Заносим в конкретную запись по id конкретное поле нужное значение
    await session.execute(cursor)
    await session.commit()

    if lim == 8:
        print (f'Условие соблюдается {lim}')

    else:
        print(f'Условие не соблюдается {lim}')
→ Ссылка