防止python在sql查询中转义引号



我使用的是带有postgis扩展的postgres数据库。我必须使用python作为后端将数据插入到postgres中。我使用psycopg2进行连接,我的python版本是3.7。我无法推送我的数据,因为python一直在转义字符串文字。以下是我的代码。

def insert(lvalues):
lvalues = [str(i) for i in lvalues]
values = ', '.join(lvalues)
return values

if __name__ == '__main__':
cursor, conn = connect()
cord = [
[
[
67.774658203125,
25.69103802005013
],
[
68.90625,
24.367113562651262
],
[
73.970947265625,
25.958044673317843
],
[
74.87182617187499,
28.565225490654658
],
[
70.33447265624999,
28.815799886487298
],
[
67.774658203125,
25.69103802005013
]
]
]
js = insert(('GISid', 'srid', 'familyid', 'geom', 'nameofgeom'))
jst = '''{  "type": "Polygon","coordinates": ''' + str(cord) + ''',
"crs": {"type": "name", "properties": {"name": "EPSG:4326"}}
}'''

print(cursor.mogrify(
"INSERT INTO public.spatial_data(gid, srid, familyid, geom, nameofgeom) VALUES (103,4326,2,ST_GeomFromGeoJSON(%s),'polygon') ",
(jst,)))

我得到的结果如下:

b'INSERT INTO public.spatial_data(gid, srid, familyid, geom, nameofgeom) VALUES (103,4326,2,ST_GeomFromGeoJSON('{  "type": "Polygon","coordinates": [[[67.774658203125, 25.69103802005013], [68.90625, 24.367113562651262], [73.970947265625, 25.958044673317843], [74.87182617187499, 28.565225490654658], [70.33447265624999, 28.815799886487298], [67.774658203125, 25.69103802005013]]],n        "crs": {"type": "name", "properties": {"name": "EPSG:4326"}}n            }'),'polygon') '

有人能提出一种删除出现在mogrify结果中的\和\的方法吗。游标是psycopg2连接游标对象。提前谢谢。

如果使用cursor.execute而不是.mogrify会发生什么?听起来它已经在做正确的事情了。。。

  • 在任何情况下,反斜杠都来自print语句,不会发送到数据库。

  • 如果确实需要去掉换行符,它们都来自jst变量;使用类似jst.replace('n', ' ')的东西

虽然mogrify给出的语句与使用execute命令时执行的语句类似,但它给了我们一个repr版本。如果计划直接使用mogrify输出,应该会有问题,但如果使用单独的execute语句,则可能会导致错误。(并非总是如此(。字符串替换帮助我摆脱了这个问题。

jst.replace('n', ' ').replace("'",' ')

最新更新