我有一个应用程序需要通过使用良好的老式模型以及生成的 sql 与数据库交互。
Session = sessionmaker(bind=engine)()
cmd = """insert into "STO_BANK_CONTROL" ("isn","TRANS_REF_NO","weird") values (8078638,'#:0057/13 ','');"""
Session.execute(cmd);
这引发了异常:
StatementError: A value is required for bind parameter u'0057' (original cause: InvalidRequestError: A value is required for bind parameter u'0057') u'insert into "STO_BANK_CONTROL" ("isn","TRANS_REF_NO","weird") values (8078638,\'#%(0057)s/13 \',\'\');' [{}]
但如果我将 cmd
直接复制到 psql 控制台中,它就可以正常工作。
我的问题是:
为什么 sqlalchemy 会破坏工作代码,我该如何防止这种情况发生?
最佳答案
问题出在冒号上。该表示法用于指定绑定(bind)参数。要修复它:
cmd = cmd.replace(':','\\:')
关于python - sqlalchemy session 执行搞乱了有效的 postgres 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676625/