python - sqlalchemy session 执行搞乱了有效的 postgres 语法

标签 python postgresql sqlalchemy syntax-error

我有一个应用程序需要通过使用良好的老式模型以及生成的 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/

相关文章:

python - SQLAlchemy 0.7 - 最大列长度

python - 在 Python 和 OpenCV 中使用立体图像计算真实世界的坐标

python - pep8 这行代码的首选方式

json - 更新 Postgresql 中 JSON 字段中的嵌套标记

php - Uncaught Error : Call to undefined function pg_connect() using XAMPP on Windows

python - 如何验证 SQLAlchemy ORM 中的列数据类型?

python - 正则表达式子序列匹配

python - pandas dataframe to_dict 两列作为索引,第三列作为值

postgresql - 使用带有 liquibase 变更集上下文属性的 spring boot 配置文件来管理变更集范围

python - 使用 SQLAlchemy Integer 字段创建用于过滤的 timedelta 对象