我正在使用 Sqlalchemy 1.3 连接到 PostgreSQL 9.6 数据库(通过 Psycopg)。
我有一个非常非常原始的 Sql 字符串,它使用Psycopg2语法格式化,由于一些遗留问题,我无法修改:
statement_str = SELECT * FROM users WHERE user_id=%(user_id)s
注意%(user_id)s
我可以很高兴地使用 sqlalchemy 连接执行它,只需执行以下操作:
connection = sqlalch_engine.connect()
rows = conn.execute(statement_str, user_id=self.user_id)
它工作正常。我得到了我的用户,一切都很好。
现在,出于调试目的,我希望将%(user_id)s
参数扩展为实际值的实际查询。例如:如果user_id = "foo"
,则得到SELECT * FROM users WHERE user_id = 'foo'
我已经看到大量sqlalchemy.text(...)
用于生成语句然后获得编译版本的示例。多亏了其他答案,比如这个或这个str
,当我有一个 SqlAlchemy 查询时,我能够产生一个像样的答案。
但是,在这种特殊情况下,由于我使用的是更特定于游标的语法,%(user_id)
所以我不能这样做。如果我尝试:
text(statement_str).bindparams(user_id="foo")
我得到:
This text() construct doesn't define a bound parameter named 'user_id'
所以我想我正在寻找的是
conn.compile(statement_str, user_id=self.user_id)
但我无法得到那个。