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

SQLAlchemy中filter_by查询匹配异常,.first()返回错误数据求助

问题描述

定义的SQLAlchemy模型类如下:

class Vouchers(db.Model):
     id = db.Column(db.Integer, primary_key=True)
     percentage = db.Column(db.Float, nullable=False)
     voucher = db.Column(db.String(80), unique=True)
     voucher_type = db.Column(db.String(10), nullable=False)
     voucher_states = db.Column(db.JSON, nullable=False)

表中存储的数据:

idpercentagevouchervoucher_typevoucher_state
3500hfd4775simple[Wisconsin]

执行查询语句 voucher_exist = Vouchers.query.filter_by(voucher=0).first() 时,意外返回了ID为3的凭证数据,不符合预期,求问题原因及返回该行数据的理由。

问题原因
  • 类型不匹配引发隐式转换:voucher字段在模型里是字符串类型,但查询时传入的是整数0。数据库执行比较操作时,会自动将字符串类型的voucher值隐式转换为数值类型,而字符串hfd4775无法转换为有效数字,会被数据库解析为0,刚好和查询条件中的0匹配。
  • 返回第一行数据的原因:数据库匹配到这条转换后等于0的记录,而.first()方法会直接返回查询结果集中的第一条数据,也就是ID为3的这条记录。

内容的提问来源于stack exchange,提问作者Maverick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:07:32