SQLAlchemy调用Query方法报错MySQLInterfaceError: Python type list无法转换
解决方案
你这个报错最常见的原因是传入filter_by的original_song_title参数是列表类型,而非查询需要的基础类型(比如字符串),按下面的步骤排查就行:
- 先查入参类型
在执行查询前加一行打印,确认参数的实际类型和值:
很多场景都会不小心传入列表:比如从接口请求里取参数时拿到了数组、做字符串处理时返回了列表、赋值的时候错把别的列表变量赋给了它。你另一个正常的查询用的print(type(original_song_title), original_song_title)remix_artist_name是字符串类型,自然不会触发这个报错。 - 再对比模型字段定义
把OriginalSong模型里的original_song_title字段定义,和RemixArtist里的remix_artist_name做对比,确认是不是写错了字段类型,比如误把String写成了ARRAY,或者加了错误的自定义类型转换逻辑。 - 排除驱动兼容问题
如果上面两步都没查出问题,大概率是你用的mysql-connector驱动和当前SQLAlchemy版本不兼容。可以换用pymysql驱动测试:先装依赖pip install pymysql,再把数据库连接串的前缀从mysql+mysqlconnector://改成mysql+pymysql://,重新运行项目看是否还报错。 - 调试SQL语句
你也可以打印出生成的SQL确认问题:
正常生成的WHERE条件里参数是具体的字符串值,如果参数是列表格式,就可以确认是入参或者字段映射的问题。query = db.query(models.OriginalSong).filter_by(original_song_title=original_song_title) print(query.statement.compile(compile_kwargs={"literal_binds": True}))
内容的提问来源于stack exchange,提问作者Caleb Jay
相关产品推荐
相关产品推荐

