1

我正在编写一个 python 脚本,它将对文本文件进行一些处理。作为该过程的一部分,我需要将制表符分隔文件的每一行导入到本地 MS SQL Server (2008) 表中。我正在使用 pyodbc,我知道该怎么做。但是,我对执行它的最佳方式有疑问。

我将遍历文件,为文件的每一行创建一个 cursor.execute(myInsertSQL)。有没有人看到任何问题等待提交语句,直到所有记录都被循环(即在循环之后执行 commit() 而不是在每个单独执行之后的循环内)?我问的原因是某些文件将有超过 5000 行。我不知道尝试“保存它们”并立即提交所有 5000 是否会导致问题。

我对python相当陌生,所以我还不知道所有这些问题。

谢谢。

4

2 回答 2

0

如果我理解你在做什么,Python 就不会成为问题。在事务中执行语句不会在 Python 中创建累积状态。它只会在数据库服务器本身这样做。

当您提交时,您需要确保提交已发生,因为大批量提交可能会与数据库中的干预更改发生冲突。如果提交失败,您将不得不再次重新运行批处理。

这是我所知道的大批量和 Python/ODBC 的唯一问题(它甚至不是真正的 Python 问题,因为无论如何你都会遇到这个问题。)

现在,如果您在内存中创建所有 SQL,然后循环遍历内存表示,那可能更有意义。尽管如此,现代机器上的 5000 行文本确实没什么大不了的。如果您开始需要多处理两个数量级,您可能需要重新考虑您的流程。

于 2009-08-25T00:47:19.563 回答
0

创建一个文件并使用BULK INSER T。它会更快。

于 2009-08-25T03:16:43.593 回答