有两张桌子
Tbl1 = Table(
'tbl_1', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id'), nullable=False),
...other columns
)
Run Code Online (Sandbox Code Playgroud)
和
Tbl2 = Table(
'tbl_2', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id'), nullable=False),
...other columns
)
Run Code Online (Sandbox Code Playgroud)
我想为一个用户计算两个表中的所有数据。
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)
Run Code Online (Sandbox Code Playgroud)
问题是 - 如何为联合计数列设置列名,而不是查看内部结构?union.c.tbl_row_count我只在调试模式下看到。
第二次尝试是:
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')
Run Code Online (Sandbox Code Playgroud)
但在那种情况下,列的内部名称是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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3612 次 |
最近记录: |