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

Flask SQLAlchemy:如何将列表传入IN绑定参数:songs?

解决SQLAlchemy中列表/元组作为IN参数绑定的问题

嘿,这个问题我之前踩过同款坑!你遇到的AttributeError原因很明确:SQLAlchemy的connection.execute()方法,当你用带命名参数(比如:songs)的SQL语句时,第二个参数必须是键值对形式的字典,而你直接传了元组songs,它会尝试调用这个对象的keys()方法(因为默认期望映射类型),但列表/元组根本没有这个方法,所以就触发报错了。

修复步骤超简单:

把你的元组包装成字典,键就是SQL里的参数名:songs,对应的值就是你的歌曲列表/元组。只需要修改connection.execute()这一行:

songs = ('Song1', 'Song2', 'Song3', 'Song4', 'Song5')
engine = app.db.engine
connection = engine.connect()
rawSqlResult = text( "SELECT * FROM AlbumView WHERE Song IN :songs")
# 核心修改:将songs包装为字典传入
queryResult = connection.execute(rawSqlResult, {"songs": songs})
tempDict, resultList = {}, []
for rowproxy in queryResult:
    for tup in rowproxy.items():
        tempDict = {**tempDict, **{tup[0]: tup[1]}}
    resultList.append(tempDict)
print(resultList)

额外小提醒:

完全不用手动把列表拼接成('Song1','Song2')这种字符串再插入SQL,SQLAlchemy会自动帮你处理IN子句的参数绑定,既安全(避免SQL注入风险)又省心——不管你传的是列表还是元组,都能正常解析工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:21