gpt4 book ai didi

python - 在 sqlalchemy 中定义列 func.count 的名称

转载 作者:行者123 更新时间:2023-12-03 10:32:47 26 4
gpt4 key购买 nike

有两张 table

Tbl1 = Table(
'tbl_1', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id'), nullable=False),
...other columns
)


Tbl2 = Table(
'tbl_2', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id'), nullable=False),
...other columns
)

我想为一个用户计算两个表中的所有数据。
q1 = Tbl1.count().where(Tbl1.c.user_id == some_id)
q2 = Tbl2.count().where(Tbl2.c.user_id == some_id)
union = q1.union(q2).alias('uni')
query = sqlalchemy.select([sqlalchemy.func.sum(union.c.tbl_row_count)], from_obj=union)

问题是 - 如何为联合计数列设置列名,而不是查看内部结构? union.c.tbl_row_count 我只在 Debug模式下看到。

第二次尝试是:
import sqlalchemy as sa

q1 = sa.select([sa.func.count(Tbl1.c.id).alias('cnt')]).where(Tbl1.c.user_id == some_id)
q2 = sa.select([sa.func.count(Tbl2.c.id).alias('cnt')]).where(Tbl2.c.user_id == some_id)
union = q1.union(q2).alias('uni')

但在那种情况下,列的内部名称是 uni.c.count_1

最佳答案

实际上,在这种情况下最好控制命名。有关应该生成 SQL 的代码,请参阅下面的代码与您现在拥有的相同:

q1 = select([func.count(Tbl1.c.id).label("xxx")]
).where(Tbl1.c.user_id == some_id)
q2 = select([func.count(Tbl2.c.id).label("xxx")]
).where(Tbl2.c.user_id == some_id)
union = q1.union(q2).alias('uni')
query = select([func.sum(union.c.xxx).label("total_xxx")], from_obj=union)

关于python - 在 sqlalchemy 中定义列 func.count 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com