为什么当我尝试执行带有百分号的原始 SQL 字符串时,SQLAlchemy 会产生错误?

AME*_*AME 4 python sql sqlalchemy

我尝试基本上执行一些这样的 sql(以复杂的方式构建):

sql = "SELECT COUNT(*) FROM entities WHERE (unit = '%')"
Run Code Online (Sandbox Code Playgroud)

使用此 Python 代码:

engine.execute(sql)
Run Code Online (Sandbox Code Playgroud)

然后会发生什么是我得到一个

TypeError: 'dict' object does not support indexing
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Mar*_*ers 7

不是 100% 确定,但我认为 SQLAlchemy 正试图将%字符解释为 SQL 参数。我会尝试加倍%字符来解决这个问题:

sql = "SELECT COUNT(*) FROM entities WHERE (unit = '%%')"
Run Code Online (Sandbox Code Playgroud)

这取决于您使用的数据库;不同的数据库适配器使用不同的参数样式。例如,用于 PostgreSQL 数据库连接的 psycopg2 模块使用的%s样式和文档%%%文字值插入 SQL 语句的正确方法