我希望使用以下代码从表中获取所有行:
table_row_count = 1000000
batch_size = 10000
sql = """SELECT t.*
FROM (
SELECT ROWNUM AS row_num,
sub_t.*
FROM (
SELECT name_employer
FROM my_table
WHERE section = 'OTHER'
) sub_t
) t
WHERE t.row_num BETWEEN :LOWER_BOUND AND :UPPER_BOUND"""
data = []
for lower_bound in range(0, table_row_count, batch_size):
cursor.execute(sql, {'LOWER_BOUND': lower_bound,
'UPPER_BOUND': lower_bound + batch_size - 1})
for row in cursor.fetchall():
data.append(row)
代码的原始源代码:Oracle: fetchall()停止使用大SELECT语句
然而,这需要永远的时间。我的数据有五百万。一排排。还有别的办法吗?
发布于 2022-10-26 03:15:20
对于较大的结果集,增加arraysize
。尝试类似于cursor.arraysize = 10000
的内容,然后根据数据和性能要求调整大小。
请参阅甲骨文手册。
您可能还想看看https://github.com/cjbj/cx-oracle-notebooks中的最佳实践
还可以看到甲骨文发布公告 --是时候升级到python了。
https://stackoverflow.com/questions/74188756
复制