使用Python并行上传文件列表记录到数据库

0 投票
2 回答
743 浏览
提问于 2025-04-16 04:38

我有一堆文件,每个文件里面有很多记录,记录之间用换行符(\n)分隔。现在我想把这些记录同时处理,然后上传到某个SQL服务器。有没有人能给我个主意,怎么用Python来做到这一点?

2 个回答

0

我建议使用一个连接池。我给你提供了一个例子。为了提高处理速度,你最好把数据插入数据库的操作批量处理。一个简单的方法是先在Python中处理好所有记录,然后使用Mark评论中提到的BULK INSERT工具来进行插入。如果你一个一个地插入,那速度会慢很多,因为你的程序需要等着网络来回传输到SQL服务器。

from multiprocessing import Pool
import sys

def worker(record):
    print "Processing... %s" % (record)


pool = Pool(processes=8)
for record in sys.stdin:
    pool.apply_async(worker, [record])

pool.close()
pool.join()
1

最好的方法可能不是同时上传数据,而是使用SQL Server的批量导入机制。
比如说:
BULK INSERT
bcp

补充说明:

如果你需要处理这些数据,我常用的方法是:
1) 先把数据批量加载到一个临时表中;
2) 在数据库中处理这些数据;
3) 然后再插入到主表中。

第2步和第3步可以合并,如果处理的方式比较简单的话。

这样做可能会更快,因为减少了与服务器之间的往返次数,而且处理一组数据通常比逐行处理要快。

另外,我觉得SQL Server在处理这些数据时会利用多个CPU,所以你可以免费享受到并行处理的好处。

撰写回答