我正在编写一个python脚本,它将对文本文件进行一些处理。作为该过程的一部分,我需要将制表符分隔文件的每一行导入到本地MS SQL Server(2008)表中。我正在使用pyodbc,我知道如何做到这一点。但是,我对执行它的最佳方法有疑问。
我将遍历文件,为文件的每一行创建一个cursor.execute(myInsertSQL)。有没有人看到任何问题等待提交语句,直到所有记录都已循环(即在循环后执行commit()而不是在每个单独执行后循环内)?我问的原因是一些文件将有超过5000行。我不知道是否试图“拯救他们”并同时犯下所有5000人会导致问题。
我对python很新,所以我还不知道所有这些问题。
感谢。
答案 0 :(得分:0)
如果我理解你在做什么,Python就不会成为问题。在事务中执行语句不会在Python中创建累积状态。它只会在数据库服务器本身上这样做。
提交时,您需要确保提交已发生,因为进行大批量提交可能会与数据库中的干预更改发生冲突。如果提交失败,则必须再次重新运行批处理。
这是我对大批量和Python / ODBC所知道的唯一问题(它甚至不是真正的Python问题,因为无论如何你都会遇到这个问题。)
现在,如果你在内存中创建所有SQL,然后循环遍历内存表示,那可能更有意义。尽管如此,现代机器上的5000行文字确实没那么重要。如果您开始需要处理两个数量级以上,则可能需要重新考虑您的流程。
答案 1 :(得分:0)
创建一个文件并使用BULK INSER T.它会更快。