Импорт текстового файла в SQL Server в Python - PullRequest
1 голос
/ 25 августа 2009

Я пишу скрипт на python, который будет выполнять некоторую обработку текстовых файлов. В рамках этого процесса мне нужно импортировать каждую строку файла с разделителями табуляции в локальную таблицу MS SQL Server (2008). Я использую pyodbc, и я знаю, как это сделать. Однако у меня есть вопрос о том, как лучше всего это выполнить.

Я буду перебирать файл, создавая cursor.execute (myInsertSQL) для каждой строки файла. Кто-нибудь видит какие-либо проблемы, ожидающие фиксации операторов до тех пор, пока все записи не будут зациклены (то есть выполнение commit () после цикла, а не внутри цикла после каждого отдельного выполнения)? Причина, по которой я спрашиваю, состоит в том, что некоторые файлы будут иметь более 5000 строк. Я не знал, может ли попытка «спасти их» и передать все 5000 сразу, проблемы.

Я довольно новичок в python, поэтому пока не знаю всех этих проблем.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 августа 2009

Создайте файл и используйте BULK INSER T. Это будет быстрее.

0 голосов
/ 25 августа 2009

Если я понимаю, что вы делаете, Python не будет проблемой. Выполнение оператора внутри транзакции не создает накопительное состояние в Python. Это будет сделано только на самом сервере базы данных.

Когда вы фиксируете, вам необходимо убедиться, что фиксация произошла, поскольку наличие большого пакетного коммита может конфликтовать с промежуточными изменениями в базе данных. Если фиксация завершится неудачно, вам придется заново запустить пакет.

Это единственная проблема, с которой я сталкиваюсь при работе с большими пакетами и Python / ODBC (и это даже не проблема Python, поскольку у вас будет эта проблема независимо от того.)

Теперь, если вы создаете весь SQL в памяти, а затем просматриваете представление памяти, это может иметь больше смысла. Тем не менее, 5000 строк текста на современной машине на самом деле не так уж и много. Если вам нужно обрабатывать на два порядка больше, вам, возможно, придется пересмотреть свой процесс.

...