首页 > 解决方案 > 如何将整数列表插入到数据库查询的字符串中 - Python 3

问题描述

我正在尝试使用游标执行在 django 应用程序中进行查询,但是当我将列表传递给查询字符串时,它带有引号并返回以下错误:

psycopg2.DataError:整数的无效输入语法:“139,212,933,2303,2613”第 1 行:...ados_ibge.sociodemografia_rmc sd WHERE sd.gid IN ('139,212,9...

这是我到目前为止一直在处理的代码..

gids = self.request.GET.getlist('gid')

if gids:
    with connection.cursor() as cursor:

        g = ','.join(gids)
        cursor.execute("SELECT * FROM poi.farmacias_rmc f, dados_ibge.sociodemografia_rmc sd WHERE sd.gid IN (%s) AND ST_Intersects(sd.geom, f.geom) = true", [g])

        rows = cursor.fetchall()

标签: pythondjangopython-3.xpsycopg2

解决方案


您不应该将列表转换gids为字符串,而是转换为元组:

cursor.execute(""" 
    SELECT * FROM poi.farmacias_rmc f, dados_ibge.sociodemografia_rmc sd 
      WHERE sd.gid IN %s 
      AND ST_Intersects(sd.geom, f.geom) = true
    """, [tuple(gids)])

Python 列表会自动转换为 SQL 数组,元组会自动转换为 SQL 列表。


推荐阅读