在Python中将文本文件导入SQL Server
我正在写一个Python脚本,用来处理文本文件。在这个过程中,我需要把每一行制表符分隔的文件导入到本地的MS SQL Server(2008)表中。我使用的是pyodbc,并且知道怎么做。不过,我有一个关于最佳执行方式的问题。
我会遍历这个文件,为文件中的每一行创建一个cursor.execute(myInsertSQL)。有没有人觉得等到所有记录都处理完再提交(也就是说,在循环结束后再调用commit(),而不是在每次执行后就提交)会有什么问题?我之所以这么问,是因为有些文件会有超过5000行。我不确定把所有5000行“存起来”,然后一次性提交会不会出问题。
我对Python还比较陌生,所以还不太了解这些问题。
谢谢。
2 个回答
0
创建一个文件,然后使用 BULK INSERT。这样会更快。
0
如果我理解得没错,你在做的事情在Python中不会有问题。在一个事务中执行语句并不会在Python里产生累积的状态。这种状态只会在数据库服务器上产生。
当你提交(commit)时,需要确保提交成功,因为如果你一次性提交很多数据,可能会和数据库中其他的更改发生冲突。如果提交失败,你就得重新运行这一批数据。
我知道的关于大批量数据和Python/ODBC的唯一问题就是这个(而且这其实也不完全是Python的问题,因为不管用什么语言,你都会遇到这个问题)。
现在,如果你是在内存中创建所有的SQL语句,然后再逐个处理这些内存中的内容,那可能会更有意义。不过,5000行文本在现代计算机上其实并不算什么。如果你开始需要处理多两个数量级的数据,那你可能需要重新考虑一下你的处理方式。