Python PYDOBC 使用参数插入 SQL Server DB

标签 python sql-server python-2.7 azure-sql-database pyodbc

我目前正在尝试使用 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/

相关文章:

python - 需要 3 到 5 个位置参数,但给出了 6 个?

python - 如何在 Django Rest Framework 中使用自定义 token 模型

linux - 如何通过ssh连接执行python或bash脚本并获取返回码

Python 记录到标准输出和 StringIO

python - 删除特定索引处的字符 - python

python - 迭代变量到下一个列表项

c# - 将 Android 应用程序连接到 SQL Server

sql-server - 为数据库中的每一行填充一列

sql - SQL SERVER中 "&"运算符有什么用

python - 我的这部分代码(应该从其他 python 脚本中删除 Python 2 风格的注释)没有做任何事情。为什么?