今天在使用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