[英]Python PYDOBC Insert Into SQL Server DB with Parameters
我目前正在尝试使用 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] Incorrect syntax near ' =')。
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');
如果您想坚持使用 pyton,只需使用 pyodbc 执行上述查询即可!
如果您仍然希望执行数千条语句而不是一条语句
SQL="insert into table([Col1],[Col2],[Col3],[Col4],[Col5],[Col6],[Col7]) values (?,?,?,?,?,?,?)"
请注意'
周围的 ? 不应该在那里。
# creating column list for insertion
colsInsert = "["+"],[".join([str(i) for i in mydata.columns.tolist()]) +']'
# Insert DataFrame recrds one by one.
for i,row in mydata.iterrows():
sql = "INSERT INTO Test (" +colsInsert + ") VALUES (" + "%?,"*(len(row)-1) + "%?)"
cursor.execute(sql, tuple(row))
# cursor.execute(sql, tuple(row))
# the connection is not autocommitted by default, so we must commit to save our changes
c.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.