Как объеденить таблицы в sqlalchemy?

помогите разобраться с join. В общем, имеется 3 таблицы - Wickday, Time, Users. Мне нужно будет в Телеграм боте формировать расписание для отображения клиентам для записи. То есть человек будет сначала выбирать день недели на который он хочет записаться, затем будет выбирать !свободное! время этого дня. То есть если на 12:00 кто то был записан ранее, то в inline клавиатуре кнопки с этим временем не будет.

Таблицы выглядят вот так:

class Wickdays(Base):
__tablename__ = 'wickdays'
id = Column(Integer, primary_key=True, autoincrement=True)
wickday = Column(String, unique=True)
date = Column(String)


class Time(Base):
__tablename__ = 'time'
id = Column(Integer, primary_key=True, autoincrement=True)
time = Column(String, unique=True)


class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
date_of_birth = Column(String)
phone = Column(String)
tg_id = Column(Integer)
wickday_id = Column(Integer, ForeignKey('wickdays.id'))
time_id = Column(Integer, ForeignKey('time.id'))

Как видно, таблица Users ссылается на две другие. Так вот вопрос, как мне отобрать только такие строки из таблицы Time которые не были заняты пользователями из таблицы Users?

Поначалу я думал обойтись такой функцией:

async def get_times(day):
async with async_session() as session:
    actual_users = await session.scalars(select(Users).where(Users.wickday_id == day))
    free_time = await session.scalars(select(Time).where(Time.id != actual_users.time_id)
    return free_time

Однако, как я понял, это работает только если actual users соответствует только одной записи. Я так понимаю что все делается через join? Но как? Да еще осложняется все async sessions. Помогите пожалуйста


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