繁体   English   中英

Python PYDOBC 插入带参数的SQL Server DB

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM