我目前正在尝试使用 pyodbc 将 .csv 中的数据插入到 Azure SQL Server 数据库中。我在 Stack Overflow 上找到了大部分这种语法,但是由于某种原因,我不断收到两个不同错误之一。
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 Driver][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()
这是我遇到的主要错误,我已经在 Stack Overflow 上进行了搜索,但似乎找不到解决方案。我知道这个错误可能非常微不足道,但是我是 Python 新手,非常感谢任何建议或帮助。
最佳答案
由于 SQL Server 可以使用一条语句导入整个 CSV 文件,因此这是一种重新发明轮子的行为。
BULK INSERT my_table FROM 'CSV_FILE'
WITH ( FIELDTERMINATOR=',', ROWTERMINATOR='\n');
如果你想继续使用 python,只需使用 pyodbc 执行上述查询即可!
如果您仍然希望执行数千条语句而不是仅执行一条
SQL="insert into table([Col1],[Col2],[Col3],[Col4],[Col5],[Col6],[Col7]) values (?,?,?,?,?,?,?)"
请注意,'
周围是?不应该在那里。
关于Python PYDOBC 使用参数插入 SQL Server DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41645070/