You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:42:31