SQLAlchemy中column_property结合func.count报错,求解析
错误原因与解决方法
问题根源
错误出在Post类的vote_count字段定义上。你用了SQLAlchemy旧版本的语法,而当前版本(1.4+)的select API已更新,不再支持用列表包裹表达式,同时column_property需要接收标量子查询而非普通查询对象。
修复步骤
修改Post.py中的vote_count定义:
原代码:
vote_count = column_property( select([func.count(Vote.id)]).where(Vote.post_id == id) )
替换为:
vote_count = column_property( select(func.count(Vote.id)).where(Vote.post_id == id).scalar_subquery() )
关键改动说明
- 移除
select()里的方括号:SQLAlchemy 1.4+的select构造器直接接受列/函数表达式,无需用列表包裹 - 添加
.scalar_subquery():将查询转换为返回单个值的标量子查询,匹配column_property对单个列值的要求
修改后重新运行python3 seeds.py,即可正常执行表创建和数据插入操作。
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

