Python 准备好的 sql 语句中的整数列表
Python list of ints in prepared sql statement
我的问题与 有点相同,但我有一个整数列表。我使用的 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)")
正确的做法是什么?
您应该将 int 数组转换为字符串数组:
",".join(map(str,ids))
您不能将 IN 列表作为一个参数提供。您需要在 SQL IN 子句中提供准确的占位符数量,然后将数组提供给 execute 方法:
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (' \
+ (',?' * len(ids))[1:] + ')'
cursor.execute(sql, ids)
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,))
...
更简单干净的方法
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN %(ids)s' % {"ids": tuple(ids)}
cursor.execute(sql)
我的问题与
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)")
正确的做法是什么?
您应该将 int 数组转换为字符串数组:
",".join(map(str,ids))
您不能将 IN 列表作为一个参数提供。您需要在 SQL IN 子句中提供准确的占位符数量,然后将数组提供给 execute 方法:
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (' \
+ (',?' * len(ids))[1:] + ')'
cursor.execute(sql, ids)
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,))
...
更简单干净的方法
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN %(ids)s' % {"ids": tuple(ids)}
cursor.execute(sql)