如何在 SQL Alchemy 中仅将 Python 表达式用作混合属性
Posted
技术标签:
【中文标题】如何在 SQL Alchemy 中仅将 Python 表达式用作混合属性【英文标题】:How to use Python expression only as hybrid property in SQL Alchemy 【发布时间】:2019-09-17 08:02:32 【问题描述】:我有一个 SQL Alchemy 映射:
class Employee(Base):
__tablename__ = 'employee'
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
@hybrid_property
def me(self):
return 'Yes!' if self.first_name == 'ritratt' else 'Nope...'
现在我只想进行如下查询:
session.query(Employee.me).all()
但它不起作用,因为 SQL Alchemy 需要一个列或表达式而不是 str
。解决方案是使用hybrid_expression
,但我不想使用表达式。我希望我的映射只使用混合属性。
如何使用hybrid_property
编写一个返回str
的映射并使用query()
?
【问题讨论】:
【参考方案1】:我找到了一种解决方法。我使用 Python 导出该值,然后将其包装在 cast
或 concat
中:
from sqlalchemy import cast, String
...
@hybrid_property
def me(self):
value = 'Yes!' if self.first_name == 'ritratt' else 'Nope...'
return cast(value, String) # or return concat('', value)
这看起来还是有点老套。想知道是否存在更好的方法
【讨论】:
在这种情况下确实发挥得很好!另一个问题是:我们可以使用 self.first_name 来映射一个值吗?所以我们可以返回 dict[self.first_name] 之类的东西 似乎 self.first_name 无法与字符串“ritratt”进行比较以上是关于如何在 SQL Alchemy 中仅将 Python 表达式用作混合属性的主要内容,如果未能解决你的问题,请参考以下文章