Python Cx_Oracle select 查询使用 WHERE IN 子句绑定元组列表

Python Cx_Oracle select query binding a tupled list with WHERE IN clause

由于 Oracle 的 1000 个“IN”子句限制,一种解决方法是使用列表元组。我在 Python 中尝试这样做,但似乎无法正确绑定列表元组。

我的代码:

mylist = [(1, item1), (1, item2), (1, item3) ... (1, item1500)]
format_strings = ','.join(':%d' % i for i in range(len(mylist)))
query = '''
        select x, y, z from table where (1, column_name) IN (%s)
        '''%format_strings
with myconnection as connection:
    cursor = connection.cursor()
    cursor.execute(query, mylist)
    result = cursor.fetchall()
    ...

这给我错误:cx_Oracle.NotSupportedError:Python 不支持元组类型的值。

此错误的可能解决方法是什么?谢谢

您的 python 正在生成以下查询字符串...

select x, y, z from table where (1, column_name) IN (:0,:1,:2,...,:n)

然后您尝试提供一个元组列表作为参数。


也许生成这个字符串,并提供一个简单的参数列表...

select x, y, z from table where (1, column_name) IN ((1,:0),(1,:1),(1,:2),...,(1,:n))

例如...

mylist = [item1, item2, item3, ..., item1500]
format_strings = ','.join('(1,:%d)' % i for i in range(len(mylist)))
query = '''
        select x, y, z from table where (1, column_name) IN (%s)
        '''%format_strings
with myconnection as connection:
    cursor = connection.cursor()
    cursor.execute(query, mylist)
    result = cursor.fetchall()
    ...