Flask-SQLAlchemy调用func做聚合查询报错Name 'func'未定义
错误原因
- 直接原因:代码中使用的
func是SQLAlchemy提供的用于生成SQL聚合、函数调用的专用工具类,你没有在代码中导入该对象,因此运行时无法找到对应的定义,抛出NameError。 - 额外隐性问题:你的代码还存在两处错误,修复导入问题后依然会运行失败:
- 将别名方法
label错误拼写为lable SblClientPosition.query默认查询全模型字段,不能直接传入自定义查询字段,需要改用db.session.query或者调用with_entities方法指定返回字段
- 将别名方法
解决方案
- 首先在代码开头的导入区域添加func的导入语句:
from sqlalchemy import func
- 修正查询代码的拼写和调用逻辑,以下两种写法均可正常运行:
写法1:使用db.session.query
pool = db.session.query( SblClientPosition.stock_code, func.sum(SblClientPosition.t1_qty).label('t1_total'), func.sum(SblClientPosition.t2_qty).label('t2_total') ).filter_by(record_date='20211031').group_by(SblClientPosition.stock_code).all()
写法2:基于模型query调用with_entities
pool = SblClientPosition.query.with_entities( SblClientPosition.stock_code, func.sum(SblClientPosition.t1_qty).label('t1_total'), func.sum(SblClientPosition.t2_qty).label('t2_total') ).filter_by(record_date='20211031').group_by(SblClientPosition.stock_code).all()
内容的提问来源于stack exchange,提问作者Taurus Dang
相关产品推荐
相关产品推荐

