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

Flask-SQLAlchemy过滤字符串字段报TypeError: %d format: a number is required, not str

你代码里的错误是在获取请求参数时错误传递了类型参数导致的。
看你路由函数里的这行代码:

token = request.args.get('apitoken', '1', type=String)

这里request.args.get的type参数需要传入Python原生的类型,你此处用的String是SQLAlchemy的字段类型(大概率是你导入的sqlalchemy.types.String或者db.String),不是Python内置的字符串类型str。
这就导致你拿到的token变量不是实际的请求参数字符串,而是SQLAlchemy的String类型实例。后续你把这个实例和User.api_token字段做等值查询时,SQLAlchemy会尝试把这个String实例当成字段编译成SQL语句,取字段长度拼接VARCHAR定义时,就触发了%d需要数字但拿到了字符串的报错。

修复方法

把上面那行代码的type=String改成type=str即可:

token = request.args.get('apitoken', '1', type=str)

额外注意

你代码里还有一处逻辑错误:查询到user对象之后,你直接判断current_user.classe,但此时用户还未执行login_user操作,current_user是匿名用户实例,没有classe属性,会触发新的报错。你应该用你刚查询到的user对象做判断:

if user:
    # 替换成user.classe,不是current_user.classe
    if user.classe == -1 :
        return "-1"
    if user.classe == 0 :
        return "0"
    login_user(user)
    # 后续逻辑不变

内容的提问来源于stack exchange,提问作者Rodrigo P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:06:00