使用python将CSV文件写入SQL Server数据库
嗨,我正在尝试使用python将csv文件写入SQL
Server数据库中的表中。传递参数时遇到错误,但是手动进行操作时不会遇到任何错误。这是我正在执行的代码。
cur=cnxn.cursor() # Get the cursor
csv_data = csv.reader(file(Samplefile.csv')) # Read the csv
for rows in csv_data: # Iterate through csv
cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",rows)
cnxn.commit()
错误:pyodbc.DataError :(“ 22001”,“ [22001] [Microsoft] [ODBC SQL Server驱动程序]
[SQL Server]字符串或二进制数据将被截断。(8152)(SQLExecDirectW); [01000] [Microsoft] [ ODBCSQL Server驱动程序] [SQL Server]该语句已终止。(3621)’)
但是,当我手动插入值时。工作正常
cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",'A','B','C','D')
我确保数据库中有TABLE,数据类型与我传递的数据一致。连接和光标也正确。行的数据类型为“列表”
-
考虑动态构建查询,以确保占位符的数量与表和CSV文件格式匹配。然后,只需确保您的表和CSV文件正确无误,而不必检查您
?
在代码中是否键入了足够的占位符。以下示例假定
- CSV文件在第一行中包含列名称
- 连接已建立
- 档案名称为
test.csv
- 表名是
MyTable
-
Python 3
…
with open (‘test.csv’, ‘r’) as f:
reader = csv.reader(f)
columns = next(reader)
query = ‘insert into MyTable({0}) values ({1})’
query = query.format(‘,’.join(columns), ‘,’.join(‘?’ * len(columns)))
cursor = connection.cursor()
for data in reader:
cursor.execute(query, data)
cursor.commit()
如果文件中不包含列名:
... with open ('test.csv', 'r') as f: reader = csv.reader(f) data = next(reader) query = 'insert into MyTable values ({0})' query = query.format(','.join('?' * len(data))) cursor = connection.cursor() cursor.execute(query, data) for data in reader: cursor.execute(query, data) cursor.commit()