SQLAlchemy相当于Django的annotate()方法

2024-04-28 22:09:46 发布

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

我在SQLAlchemy中做了这样一个连接:

 items = Item.query\
    .outerjoin((ItemInfo, ItemInfo.item_id==Item.id))
 items.add_columns(ItemInfo.count)

这将导致SQLAlchemy返回元组:

^{pr2}$

我更希望“count”值作为项的属性返回,也就是说,我想:

 >>> items.first().count
 2

支持吗?在


Tags: columnsaddid属性sqlalchemycountitemsitem
1条回答
网友
1楼 · 发布于 2024-04-28 22:09:46

实际上,”第一项().count“会起作用,因为你得到的元组是一个命名元组…但是你猜你不想看到第一项().项目.foo. 在

第二种方法是通过构造所需结果的函数运行query()的结果:

def process(q):
    for item, count in q:
        item.count = count
        yield count

编辑:这里是一个通用版本:

^{pr2}$

第三,修改Item类来支持这个函数。您可以使用column_property()将选择子查询应用于您的类:http://www.sqlalchemy.org/docs/orm/mapper_config.html#sql-expressions-as-mapped-attributes。如果希望属性的加载是有条件的,可以使用deferred:http://www.sqlalchemy.org/docs/orm/mapper_config.html#deferred-column-loading。在

相关问题 更多 >