python - Python Cx_Oracle 选择查询将元组列表与 WHERE IN 子句绑定
问题描述
由于 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()
...
推荐阅读
- javascript - 基于蹦床的链表(lisp 树)到带循环的字符串
- xcode - Xcode 12.0 调试时不显示变量
- javascript - 如何将状态变量传递给 React 中的函数?
- sql - 如何在以下 SQL 查询的输出中获得正确的名称?
- spring - 在 ResponseEntityExceptionHandler 中,handleExceptionInternal 和 handleException 之间的确切区别是什么?
- mysql - 如何在 Laravel 中使用子句进行链接
- python - 如何在自定义健身房环境中定义动作空间,每回合接收 3 个缩放器和一个矩阵?
- python-3.x - 尝试导入 cv2(opencv-python) 包时出错
- javascript - 我想为这个 jquery 创建循环
- python - ImportError:libopencv_ml.so.4.4:无法打开共享对象文件:没有这样的文件或目录