python - 使用 cx_Oracle 插入数据和多进程
问题描述
我有 1000 万条数据需要做一些数据整理,然后这个数据框将被插入到 Oracle 中。它太大了,我尝试将它们拆分10次,这样我一次可以处理100万个。这是我的代码:
for i in range(10):
rows = cursor.fetchmany(1000000)
# change rows into dataframe
df_nps = pd.DataFrame(rows, columns=[x[0] for x in cursor.description])
# data_preprocessing
df_nps = data_preprocessing(df_nps)
# insert the clean data into Oracle
cursor2 = conn.cursor()
cursor2.executemany('''insert into table_A(sdate,first_name) values(:1,:2)''', df_nps)
conn.commit()
现在,我想使用 Python 多处理,这样也许它可以在一段时间内更快地工作。但是,我很好奇如果我在上面的循环中使用多处理,那么cursor2.executemany
table_A 会被锁定吗?
解决方案
如果您创建一个会话池并创建多个线程,并且在每个线程中,您从池中获取一个连接,该连接将许多行插入应该为您工作的表中。您可能希望以较小的批次执行此操作,以调整在 Python 中花费的时间(由于 GIL,这将是单线程的)以及等待数据库完成插入所花费的时间。
推荐阅读
- python - 无法使用 xpath 从某些 html 元素中解析某些信息
- python - 如何让 OpenCV 在 Raspberry Pi 4 (Raspbian Buster) 上完全运行?
- sql - 使用 Oracle SQL 在最接近的值中查找中位数
- android - 使用 Fragment 从我的应用程序发送消息
- swift - 使用 vapor 导入多个私有存储库时出错
- java - Spring Boot批处理:如何使用作业参数运行作业
- python - 使用 sudo python3 但不使用 python3 时导入 aws 凭据时出错
- swiftui - Xcode 11 beta 3 在同时使用 NavigationLink、@EnvironmentObject 和 List 时崩溃
- crystal-reports - 为什么水晶报告在我编写代码时提示我输入参数字段值
- random - 是否可以预测计算机会随机选择什么数字?