2017-01-13 67 views
0

我目前正在尝试使用pyodbc将数据从.csv插入到Azure SQL Server数据库中。我在堆栈溢出中找到了这个语法的大部分,然而由于某种原因,我总是收到两个不同的错误之一。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)为了摆脱这个错误,我通过添加'=?'来定义参数标记。到插入语句中的每个列(请参阅下面的代码),然而这会给出以下错误:ProgrammingError:('42000'“[42000] [Microsoft] [ODBC SQL Server驱动程序] [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 Server可以用一个语句导入整个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

相关问题