小编ben*_*wah的帖子

SQLAlchemy,PostgreSQL和array_agg:如何从array_agg中选择项目?

我想在子查询中使用array_agg,然后在我的主查询中使用它的数组索引来聚合数据,但是,在尝试了许多不同的方法之后,我真的不知道应该怎么做; 有人可以解释为什么在下面的例子中我得到一系列None值而不是数组中的第一个类别?

我理解以下简化示例可以在不对数组[i]执行SELECT的情况下完成,但它将解释问题的本质:

from sqlalchemy import Integer
from sqlalchemy.dialects.postgres import ARRAY

prods = (
    session.query(
        Product.id.label('id'),
        func.array_agg(ProductCategory.id, type_=ARRAY(Integer)).label('cats'))
    .outerjoin(
        ProductCategory,
        ProductCategory.product_id == Product.id)
    .group_by(Product.id).subquery()
)

# Confirm that there's categories:
[x for x in session.query(prods) if len(x[1]) > 1][:10]
"""
Out[48]: 
[(2428, [1633667, 1633665, 1633666]),
 (2462, [1162046, 1162043, 2543783, 1162045]),
 (2573, [1633697, 1633696]),
 (2598, [2546824, 922288, 922289]),
 (2645, [2544843, 338411]),
 (2660, [1633713, 1633714, 1633712, 1633711]),
 (2686, [2547480, 466995, 466996]),
 (2748, [2546706, 2879]),
 (2785, [467074, 467073, 2545804]),
 (2806, [2545326, …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy

8
推荐指数
1
解决办法
5753
查看次数

标签 统计

postgresql ×1

python ×1

sqlalchemy ×1