如何在sqlalchemy查询中选择文本值?

2024-04-23 22:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个查询如下:

query = session.query(Item) \
    .filter(Item.company_id == company_id) \
    .order_by(Item.id)

这是一个非常基本的查询。除了提取项的值之外,我还想在组合中附加一个附加值,并将其返回给我。在原始SQL中,我会这样做:

SELECT *, 0 as subscribed
FROM items
WHERE company_id = 34
ORDER BY id

如何通过sqlalchemy手动添加该值?


Tags: fromidsqlbysessionasorderfilter
2条回答

如已接受答案的注释中所述,^{}有一个“速记”,它可以减少为文字bindparam,^{}提供名称的需要:

Return a literal clause, bound to a bind parameter.

所以一个人不必写

session.query(Item, bindparam("zero", 0).label("subscribed"))

但是只是

session.query(Item, literal(0).label("subscribed"))

不必担心引用等,如果传递字符串之类的。

您需要使用^{},它看起来有点像这样:

sqlalchemy.orm.Query(Item, sqlalchemy.sql.expression.literal_column("0"))

请注意,text参数是在没有任何转换的情况下插入到查询中的;如果从应用程序外部接受文本参数的值,则这可能会使您面临SQL注入漏洞。如果这是你需要的东西,你会想使用^{},这是很容易使用的;但是你必须发明一个名字:

sqlalchemy.orm.Query(Item, sqlalchemy.sql.expression.bindparam("zero", 0))

相关问题 更多 >