SQLAlchemy使用Table.select()查询单列报ArgumentError的解决方法
错误原因
你的代码传参位置错误:SQLAlchemy中Table.select()方法的第一个位置参数是预留传入WHERE条件的,不是用来指定查询列的。你把待查询的列列表[guild.c.age]传到了这个参数位,SQLAlchemy会把它识别成WHERE条件表达式,自然会触发类型校验报错——和你看到的错误信息一致:程序期望拿到WHERE/HAVING子句的合法表达式,实际拿到的是age列对象。
修复方案
根据你使用的SQLAlchemy版本,选以下任意一种写法即可实现单列查询:
- 兼容所有1.x版本,沿用
Table.select()链式调用:用with_only_columns()方法指定要查询的目标列
guild_id= 807887608943738881 guild = meta_data.tables['guild_'+str(guild_id)] stmt = guild.select().with_only_columns(guild.c.age).where(guild.c.user_id == user_id) a = engine.execute(stmt).fetchall() print(a)
- SQLAlchemy 1.4+ 推荐写法:直接用核心
select()构造器指定查询列
from sqlalchemy import select guild_id= 807887608943738881 guild = meta_data.tables['guild_'+str(guild_id)] stmt = select(guild.c.age).select_from(guild).where(guild.c.user_id == user_id) a = engine.execute(stmt).fetchall() print(a)
注意:不要把要查询的列包裹在列表里传入新版
select()方法,直接传入列对象即可,避免触发旧版兼容逻辑导致异常。
内容的提问来源于stack exchange,提问作者Mr. Nom4ik
相关产品推荐
相关产品推荐

