Python Pyscopg:如何使用带有 LIMIT/OFFSET 和 WHERE 的占位符?

she*_*onk 6 python postgresql psycopg2

我目前正在尝试在 Python 的 psycopg 模块中的 PostgreSQL 查询中使用占位符。这是我正在使用的代码示例。

table.execute('SELECT * FROM table WHERE col2 = %s ORDER BY pID ASC LIMIT %s OFFSET %s;',(val1,val2,val3))
Run Code Online (Sandbox Code Playgroud)

我在某处读到,不可能对 LIMIT 和 OFFSET 使用这样的占位符,但是我应该对 WHERE = 使用这种占位符格式。

从python / postgresql / psycopg2中的用户输入安全地指定'order by'子句

有谁知道这个 sql 查询的正确占位符语法?谢谢!

Mic*_*ard 6

Limit 和 offset 都可以与占位符一起使用,没有任何问题。

一般来说,只要表达式中允许使用“值”,您就可以使用占位符。

cur.execute("select * from node where node_name = %s limit %s offset %s", ('test', 5, 5))

效果很好。

正如参考文章中已经指出的,您不能使用占位符来引用表、列、架构或其中任何一个的别名。在这些情况下,您通常需要在调用执行之前进行自己的变量替换。