python - sqlalchemy.exc.ProgrammingError : (psycopg2. ProgrammingError) ":"处或附近的语法错误

标签 python postgresql sqlalchemy

这是我的查询:

QUERY = """
        UPDATE my_table
        SET
            my_prop=:foo
        WHERE hello='world'
"""

我这样执行语句:

sqlalchemy_engine.execute(QUERY, foo='bar')

当我这样做时,出现以下错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near ":"
UPDATE my_table\n        SET\n            my_prop.foo = :foo
                                                         ^

在将值传递到 SQL Alchemy 执行之前,我从未遇到过问题。我做错了什么?

最佳答案

I've never run into problems before passing values into the SQLAlchemy execute. What am I doing wrong?

您可能一直在使用 Session.execute()之前,而不是 Engine.execute() .前者自动用 text() 包装 SQL 字符串构造,或者至少它的行为如此,这是这里的关键; text() 为 DB-API 驱动程序提供绑定(bind)参数/占位符的独立处理。没有它,您就会随心所欲地使用 DB-API,as noted by Craig Ringer in their answer .

因此,为了直接在引擎中使用:name 样式的占位符,只需使用text() 包装您的查询:

sqlalchemy_engine.execute(text(QUERY), foo='bar')

请注意引擎 is the starting point SQLAlchemy 应用程序的所有内容都构建在它之上,因此这可能是一个不进行自动包装而另一个进行自动包装的原因。 session 是更高级别的抽象。

关于python - sqlalchemy.exc.ProgrammingError : (psycopg2. ProgrammingError) ":"处或附近的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47190680/

相关文章:

Python xml 编码

python - 创建具有一个数组形状和列表中的值的 numpy 数组

javascript - 如何在postgresql中更改格式日期

python - Pyramid 、sqlalchemy dbsession

python - 加入表本身以查找具有相同关系的用户

python - 使用 OpenCV 获取图像中最常见的颜色

python - 在PYTHON中将多个文件读入单独的数据帧

sql - 使用 sql 变量更新 PostgreSQL hstore 字段

regex - 仅在 PostgreSQL 中显示不同的正则表达式匹配

python - 在 SQLAlchemy 中动态构造过滤器