【发布时间】:2019-02-21 16:31:22
【问题描述】:
情况:我正在将整个 SQL 表加载到我的程序中。为方便起见,我使用 pandas 来维护行数据。然后,我正在创建一个我想从 SQL 表中删除的行的数据框。不幸的是(我不能改变这个)除了内置的 Oracle ROWID(它不是一个真正的表列,它是一个伪列)之外,该表没有任何主键,但我可以如果需要,将 ROWID 作为我的数据框的一部分。
该表有数十万行,我可能会在每次运行程序时删除几千条记录。
问题: 使用 Cx_Oracle 删除没有主键的多行/记录的最佳方法是什么?我不认为创建一个循环来提交数千个删除语句是非常有效的或 Pythonic。虽然我担心构建一个以 ROWID 为键并包含包含数千个项目的子句的单个 SQL 删除语句:
Where ROWID IN ('eg1','eg2',........, 'eg2345')
这种担忧有效吗?有什么建议吗?
【问题讨论】:
-
我并不特别了解 CX-Oracle,但我过去在 TSQL 中生成过非常大量的类似“IN”子句并且从未遇到过问题。我说试试看。 . .如果有限制,则可能很大,因此您可以将代码更改为一次执行 1024 次(或施加任何限制)。