Я новичок в SqlAlchemy и пытаюсь выяснить лучший способ go о том, что я пытаюсь настроить.
Я переношу веб-приложение Flask / Postgresql из базового c драйвер psycopg2 для SqlALchemy ORM на основе, и у меня есть базовая c настройка, связанная с ORM.
Скажем, у меня есть объект базового уровня, называемый event
.
У меня есть несколько users
связанный с этим event
.
Event
имеет атрибуты created_date
, _key
, description
.
Теперь, что я хотел бы достичь, так это Я запрашиваю что-то в event
, а также автоматически возвращаю дополнительные вычисляемые атрибуты. Я понимаю, как создать вычисляемый атрибут на основе трех перечисленных мной столбцов (created_date
, _key
, description
), но у меня есть дополнительное требование - разные пользователи будут иметь разные вычисляемые значения. Поэтому я хочу получить запрос пользователя c, в котором я могу передать идентификатор пользователя в @property
, чтобы затем вычислить соответствующие значения.
Итак, сложив его, код будет выглядеть следующим образом :
class Event(Base):
__tablename__ = 'activity'
_key = Column(Integer, primary_key=True)
created_date = Column(String)
description = Column(String)
@property
def calculated_attribute(self):
# Do some lookups here based on user_id
calculated_attr = "ResultOfLogic"
return calculated_attr
и затем выполните что-то вроде этого:
как user_id = 1
with session_scope as session:
session.query(Event).all()
и получите данные, подобные этому:
description: "Description"
created_date: "1/7/2020"
calculated_attr: "Result calculated for user 1"
или для user_id=2
:
description: "Description"
created_date: "1/7/2020"
calculated_attr: "Something totally different"
Я попытался добавить self.user_id в конструктор init в Event, но кажется, что мы работаем с entities
, а не с экземплярами классов с sqlalchemy. Возможно ли вообще то, что я пытаюсь сделать, или мне придется выполнять какую-то ручную работу для создания этих объектов после моего запроса? Я хотел бы иметь возможность использовать sql для сортировки этих свойств, что было одной из причин, по которой я пытался вычислить эти результаты при выполнении запроса.