2017-01-13 8 views
0

В настоящее время я пытаюсь использовать pyodbc для вставки данных из CSV в базу данных Azure SQL Server. Я нашел большую часть этого синтаксиса в Stack Overflow, но по какой-то причине я продолжаю получать одну из двух разных ошибок.Python PYDOBC Вставить в базу данных SQL Server с параметрами

1) Всякий раз, когда я использую следующий код, я получаю сообщение об ошибке «SQL содержит 0 параметров маркеров, но 7 параметров были предоставлены».

import pyodbc 
import csv 
cnxn = pyodbc.connect('driver', user='username', password='password', database='database') 
cnxn.autocommit = True 
cursor = cnxn.cursor() 
csvfile = open('CSV File') 
csv_data = csv.reader(csvfile) 
SQL="insert into table([Col1],[Col2],[Col3],[Col4],[Col5],[Col6],[Col7]) values ('?','?','?','?','?','?','?')" 
for row in csv_data: 
    cursor.execute(SQL, row) 
time.sleep(1) 
cnxn.commit() 
cnxn.close() 

2) Для того, чтобы избавиться от этой ошибки, я определяю маркеры параметров, добавив «=?» для каждого столбца в инструкции insert (см. код ниже), однако это приводит к следующей ошибке: ProgrammingError: («42000» [42000] [Microsoft] [драйвер SQL Server ODBC] [SQL Server] Неверный синтаксис рядом с ' = ').

import pyodbc 
import csv 
cnxn = pyodbc.connect('driver', user='username', password='password', database='database') 
cnxn.autocommit = True 
cursor = cnxn.cursor() 
csvfile = open('CSV File') 
csv_data = csv.reader(csvfile) 
SQL="insert into table([Col1]=?,[Col2]=?,[Col3]=?,[Col4]=?,[Col5]=?,[Col6]=?,[Col7]=?) values ('?','?','?','?','?','?','?')" 
for row in csv_data: 
    cursor.execute(SQL, row) 
time.sleep(1) 
cnxn.commit() 
cnxn.close() 

Это главная ошибка я имеющий проблемы с, я искал по всему переполнению стека и не могу показаться, чтобы найти решение. Я знаю, что эта ошибка, вероятно, очень тривиально, однако я я новичок в Python и был бы весьма признателен за любые советы или помощь.

ответ

3

Поскольку SQL сервер может импортировать весь файл CSV с помощью одного оператора это переосмысление колеса.

BULK INSERT my_table FROM 'CSV_FILE' 
WITH (FIELDTERMINATOR=',', ROWTERMINATOR='\n'); 

Если вы хотите продолжать использовать pyton, просто выполните вышеуказанный запрос с pyodbc!

Если вы по-прежнему предпочитают выполнять тысячи заявлений, а не только один

SQL="insert into table([Col1],[Col2],[Col3],[Col4],[Col5],[Col6],[Col7]) values (?,?,?,?,?,?,?)" 

к сведению, что ' sorrounding? не должно быть там.

+0

удивительный, это сработало спасибо! – ls101

 Смежные вопросы

  • Нет связанных вопросов^_^