【发布时间】:2020-09-28 06:32:06
【问题描述】:
我正在传递 empList,它有 500k 条记录作为我的查询的输入,但我的 python cx_oracle 代码失败并出现以下错误。 我需要所有这些 500k 记录的结果。如何在不创建临时表的情况下获得这个?如果我将它作为列表或数据框传递会很好。
错误:
cx_Oracle.DatabaseError: ORA-01795: 列表中的最大表达式数为 1000
curs.execute("select ID,NAME,SAL from EMP where ID in "+str(tuple(empList))+" ")
解决方案 :: 我通过每次拆分和发送 1000 条记录解决了这个问题,如下所示。而且性能方面也不错。
repeat = 1
for i in range(0, len(myList), 1000):
for j in range(i, 1000*repeat):
if j+1 <= len(myList):
tempList.append(myList[j])
//Further processing logic
tempList = []
repeat += 1
【问题讨论】:
-
如果你只是获取记录,你也可以分批 1000 个 ids
标签: sql oracle python-3.6 cx-oracle