Python-Pyscopg:如何使用带有限制/偏移的占位符,以及在哪里?

Python-Pyscopg:如何使用带有限制/偏移的占位符,以及在哪里?,python,postgresql,psycopg2,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)) 我在某个地方读到这样的占位符不可能用于限制和偏移量,但是我应该使用这种占位符格式用于WHERE= 有人知道此sql查询的正确占位符语法吗?谢谢 限制和偏移都可以与占位

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

table.execute('SELECT * FROM table WHERE col2 = %s ORDER BY pID ASC LIMIT %s OFFSET %s;',(val1,val2,val3))
我在某个地方读到这样的占位符不可能用于限制和偏移量,但是我应该使用这种占位符格式用于WHERE=


有人知道此sql查询的正确占位符语法吗?谢谢

限制和偏移都可以与占位符一起使用,没有任何问题

一般来说,可以在表达式中允许“值”的任何位置使用占位符

cur.execute(“从节点选择*,其中节点名称=%s限制%s偏移量%s”,('test',5,5))

很好用


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

在非常旧的PostgreSQL版本中,确实不可能在
LIMIT
OFFSET
子句中使用占位符。此功能是在7.4版中添加的,因此可以安全地假设它存在于当前安装中

但这只适用于服务器端准备的语句。Psycopg不使用服务器端准备的语句。它自己进行字符串替换,并将结果字符串作为常量发送到后端。所以原则上,您可以在任何语法上有效的地方使用它的参数替换特性


因此,无论采用哪种方式,您都建议这样做。

我没有看到关于在SQL查询的
orderby
部分中使用占位符的任何内容。此外,作为一个例子,如果你想使用占位符&
ORDER BY
,你需要自己设置格式。是的,我已经看过了文档=/I觉得手动设置SQL格式是不明智的。请参见@Clodoaldo,让标识符或表达式占位符检查。