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)
表中存储的数据:
| id | percentage | voucher | voucher_type | voucher_state |
|---|---|---|---|---|
| 3 | 500 | hfd4775 | simple | [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
相关产品推荐
相关产品推荐

