您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用psycopg2 python库并使用良好的转换类型工具构建SQL动态查询

使用psycopg2 python库并使用良好的转换类型工具构建SQL动态查询

您试图将表名作为参数传递。如果仅查看Postgresql错误日志,您可能会立即看到。

您试图通过psycopg2作为参数转义的表名,将产生如下查询

INSERT INTO E'my_table'(name, url, id, point_geom, poly_geom) VALUES (E'ST_GeomFromText(''POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))'',4326)');'

这不是您的意图,将无法正常工作;您无法转义像文字一样的表名。您必须使用普通的Python字符串插值来构造动态sql,只能将参数化的语句占位符用于实际文字值。

params = ('POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)
escaped_name = name.replace('"",'""')
curs.execute('INSERT INTO "%s"(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%%s,%%s));' % escaped_name, params)

查看我如何直接对名称进行插值以产生查询字符串:

INSERT INTO my_table(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%s,%s));

(通过%替换%%转换为纯%文本)。然后,我将该查询与定义thePOLYGON和另一个参数ST_GeomFromText作为查询参数的字符串一起使用。

我尚未对此进行测试,但是它应该为您提供正确的想法并帮助您解释问题所在。

,这是SQL注入的简便方法。我已经在上面显示代码中做了非常粗略的引用,但是如果您的客户端库提供了一个标识符引用功能,我想使用一个适当的标识符引用功能

SQLServer 2022/1/1 18:32:53 有521人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶