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

时间:2012-07-19 08:19:59

标签: python postgresql psycopg2

我觉得这是一个愚蠢的问题,但我找不到任何地方。

我想使用psycopg2构建一个SQL查询,其中用户按列指定排序/顺序。客户端是一个提供排序/分页等的javascript数据网格。

正常替换练习不起作用:(注意E'xx')

cur.mogrify('select * from table offset %s limit %s order by %s', [0,5,'sort_column'])
>>> "select * from table offset 0 limit 5 order by E'sort_column'"

缺乏清洗/替换自己的order by子句,建议的方法是什么?

我是一个副本: psycopg2 E' on table, field and schema

欢呼声

-i

1 个答案:

答案 0 :(得分:0)

Python的DBAPI中的实体名称(表/列等...)不应该通过任何占位符处理来运行,因为变量应该是。您必须自己进行格式化:

'select * from table offset %s limit %s order by %s' % (0,5,'sort_column')

但是请为WHERE var = %s等使用正确的转义/占位符函数...