[英]Parametrizing an ORM based SqlAlchemy query
我是 SqlAlchemy 的新手,并试图找出解决我正在尝试配置的内容的最佳方法。
我正在将 Flask/Postgresql webapp 从基本的 psycopg2 驱动程序迁移到基于 SqlALchemy ORM 的驱动程序,并且我有一个基本的 ORM 相关类设置。
假设我有一个称为event
的基本级别对象。
我有多个users
与此event
相关联。
Event
具有属性created_date
、 _key
、 description
。
现在,我想要实现的是,我在event
查询某些内容,并自动返回额外的计算属性。 我了解如何根据我列出的三列( created_date
、 _key
、 description
)创建计算属性,但我有一个额外的要求 - 不同的用户将有不同的计算值。 所以我想要一个用户特定的查询,我可以在其中将用户的 ID 传递到@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"
我尝试在 Event 的 init 构造函数中添加 self.user_id,但似乎我们正在使用entities
而不是使用 sqlalchemy 的类的实例。 我正在尝试做的甚至是可能的,还是在查询后我必须做一些手动工作来创建这些对象? 我希望能够使用 sql 也对这些属性进行排序,这是我在执行查询时尝试计算这些结果的原因之一。
对于那些来到这里寻找答案的人:
事实证明,您可以执行以下操作:
class Event(Base):
user_id = None
__tablename__ = 'activity'
_key = Column(Integer, primary_key=True)
created_date = Column(String)
description = Column(String)
@property
def calculated_attribute(self):
# Use user_id in here like self.
return self.user_id + "Hi!"
比您的查询看起来像:
with session_scope as session:
Event.user_id = "Your_User_Id"
session.query(Event).all()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.