我用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有不同类型的参数。。。
经过深入研究,我发现postgresql方言默认的paramstyle是“pyformat”。
有人能给我演示一下如何在某个例子中使用这个pyformat吗?
我只想使用占位符或命名占位符来形成sql语句。
我试过:
e.execute("select %s, %s;", "test", "test2")
但这也不管用。
谢谢你
编辑:
当然,我正在传递有效的连接字符串以创建引擎方法:-)
最佳答案
链接到的文档直接链接到PEP 249,它向您显示了不同的样式。
关于pyformat,它说:
“pyformat”Python扩展格式代码,例如“…其中
名称=%(名称)s'
所以这就是你需要用到的。
通过在“DBAPI pyformat”上搜索,第二个链接是指向psycopg2 documentation的链接。在提到它使用pyformat之后,还有一个“See Also”链接到a page with loads of examples。
如何使用它的示例位于原始链接中:
e.execute("select %s, %s;", ("param1", "test"), ("param2", "test2"))
也可以使用以下语法:
e.execute("select %(param1)s, %(param2)s;", param1="test", param2="test2"))
那更好。