我用sqlalchemy连接到postgresql。当我尝试这段代码:
e = create_engine('')
r = e.execute("select ?", 5)
它给了我:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) syntax error at end of input
对应http://www.sqlalchemy.org/docs/core/connections.html?highlight=engine#sqlalchemy.engine.base.Connection.execute有不同类型的paramstyles…经过深入的研究,我发现postgresql方言的默认参数样式是"pyformat"。
谁能告诉我如何在一些例子中使用这个pyformat ?我只是想使用占位符或命名占位符来形成sql语句。我试着:
e.execute("select %s, %s;", "test", "test2")
但是这个也不行
谢谢
编辑:当然,我将有效的连接字符串传递给create_engine方法:-)
您链接到的文档直接链接到PEP 249,它向您展示了不同的样式。
关于pyformat它说:'pyformat' Python扩展格式代码,例如:"…name = %(名字)s '
这就是你需要使用的
在google上搜索"DBAPI pyformat",第二个链接是psycopg2文档的链接。在提到它使用pyformat之后,有一个"See Also"链接到一个包含大量示例的页面。
如何使用它的例子在你的原始链接:
e.execute("select %s, %s;", ("param1", "test"), ("param2", "test2"))
你也可以使用这种语法:
e.execute("select %(param1)s, %(param2)s;", param1="test", param2="test2"))
哪个更好
在SqlAlchemy 1.4发布之前,接受的答案是正确的。
如果人们正在寻找如何做到这一点,这里有一个解决方案:
session.connection().exec_driver_sql(
"select %(param1)s, %(param2)s;",
{"param1": "test", "param2": "test2"}
)
https://docs.sqlalchemy.org/en/20/core/connections.html sqlalchemy.engine.Connection.exec_driver_sql