Я пытаюсь запросить многие ко многим с таблицей ассоциации, но безуспешно. Это моя модель:
favourite_events_association_table = Table('favourite_events', db.Model.metadata,
db.Column('user_uuid', UUID(as_uuid=True), db.ForeignKey('p_user.uuid'), nullable=False),
db.Column('event_uuid', UUID(as_uuid=True), db.ForeignKey('event.uuid'), nullable=False),
extend_existing=True
)
class User(db.Model, UserMixin):
__tablename__ = 'p_user'
uuid = db.Column(UUID(as_uuid=True), unique=True, nullable=False, primary_key=True, default=uuid.uuid4)
favourite_events = db.relationship('Event', secondary=favourite_events_association_table)
....
class Event(db.Model):
uuid = db.Column(UUID(as_uuid=True), unique=True, nullable=False, primary_key=True, default=uuid.uuid4)
start = db.Column(db.DateTime(timezone=False), nullable=False)
...
Что мне нужно сделать, так это просто запросить все события, связанные с пользователем x при запуске> заданного порядка дат по началу. В sql есть:
select e.uuid
from event e
inner join favourite_events fa on fa.event_uuid = e.uuid
where fa.user_uuid = 'uuid'
and e."start" > 'date'
order by e."start" desc
В данный момент я делаю итерации по списку:
for event in current_user.favourite_events:
if event.start > now:
events.append(event)
Но мне, очевидно, не нравится это решение, так как у меня также есть переупорядочить список вручную.
Любые предложения о том, как сделать этот запрос с sqlalchemy?
В случае этой итерации sql Алхимия выполняет запрос на каждой итерации (выберите * из событие, где uuid = 'uuid') или выполняет один запрос для получения всей ассоциации (выберите * из события, где uuid в (..))?
Спасибо.