【问题标题】:How to insert list of integers into a string for a database query - Python 3如何将整数列表插入到数据库查询的字符串中 - Python 3
【发布时间】:2019-09-10 15:57:25
【问题描述】:

我正在尝试使用游标执行在 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()

【问题讨论】:

  • gids的值是多少?
  • g = ','.join(str(gids))
  • 你尝试过字符串而不是传递一个列表 [g],例如,因为使用 in 运算符的查询就像 SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)

标签: python django python-3.x psycopg2


【解决方案1】:

您不应该将列表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 列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2013-03-05
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多