代码之家  ›  专栏  ›  技术社区  ›  dark horse

python-在where子句中动态传入产品名[重复]

  •  0
  • dark horse  · 技术社区  · 6 年前

    我的问题和 Python list of String to SQL IN parameter 但我有一个整数列表。我使用的python代码是:

    ids = [1000032, 1000048]
    sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (?)'    
    cursor.execute(sql, [','.join(ids)])
    

    Sybase数据库引擎的响应是:

    pyodbc.Error: ('07006', "[07006] [Sybase][ODBC Driver][SQL Anywhere]Cannot convert '1000032','1000048' to a numeric (-157) (SQLExecDirectW)")
    

    正确的方法是什么?

    0 回复  |  直到 8 年前
        1
  •  4
  •   Bryan    8 年前

    imo一种更可读的方法,可以使用 str.format

    ids = [1000032, 1000048]
    sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN ({0})' 
    sql = sql.format(','.join('?' * len(ids)))
    cursor.execute(sql, (ids,))
    ...
    
        2
  •  3
  •   trincot Jakube    8 年前

    不能将in列表作为一个参数提供。您需要在sql in子句中提供确切数量的占位符,然后将数组提供给 执行 方法:

    ids = [1000032, 1000048]
    sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (' \
           + (',?' * len(ids))[1:] + ')'
    cursor.execute(sql, ids)
    
        3
  •  0
  •   Mostafa Wattad    8 年前

    您应该将int数组转换为字符串数组:

    ",".join(map(str,ids))