解决sqlalchemy出现“A value is required for bind parameter ‘xxxx‘“错误

在使用SQLAlchemy执行SQL语句时遇到一个StatementError,原因是`REPLACE INTO`语句中的`:京A77777`被解析为参数绑定。冒号在session.execute()中作为参数标识,导致错误。解决方案是避免使用冒号或者转义。参考了官方文档和Stack Overflow上的解答,问题与参数绑定有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用sqlalchemy执行如下sql语句时报错

>>> session.execute('REPLACE INTO vehicle (`index`, `license_plate`) VALUES ('7', '(2021):京A77777')
StatementError: (sqlalchemy.exc.InvalidRequestError) A value is required for bind parameter '京A77777'
[SQL: REPLACE INTO vehicle (`index`, `license_plate`) VALUES ('77', '(2021)%(京A77777)s')]
[parameters: [{}]]

为什么‘(2021):京A77777’会变成‘(2021)%(京A77777)s’?
貌似是冒号引起的问题,
把冒号前的右括号去掉也正常,所以好像就只有‘):’这样的组合会出现错误
查了一下这是由于冒号在session.execute()中是作为参数绑定符号出现的

t = text("SELECT * FROM users WHERE id=:user_id")
result = connection.execute(t, user_id=12)

参考:
https://docs.sqlalchemy.org/en/14/core/sqlelement.html#sqlalchemy.sql.expression.text
https://stackoverflow.com/a/49913328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值