问题
My question is somewhat the same as Python list of String to SQL IN parameter but I have a list of integers. The python code I use is:
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (?)'
cursor.execute(sql, [','.join(ids)])
And the Sybase database engine responds with:
pyodbc.Error: ('07006', "[07006] [Sybase][ODBC Driver][SQL Anywhere]Cannot convert '1000032','1000048' to a numeric (-157) (SQLExecDirectW)")
What is the correct way to do this?
回答1:
IMO a more readable way to build a dynamic query string with placeholders using 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:
You cannot provide the IN-list as one argument. You need to provide the exact number of place holders in the SQL IN clause, and then provide the array to the execute method:
ids = [1000032, 1000048]
sql = 'SELECT CompNo, CompName, CompType FROM Component WHERE DeptID IN (' \
+ (',?' * len(ids))[1:] + ')'
cursor.execute(sql, ids)
回答3:
you should cast the array of int to array of strings:
",".join(map(str,ids))
来源:https://stackoverflow.com/questions/35061730/python-list-of-ints-in-prepared-sql-statement