NG_*_*_21 13 python sql-server csv pyodbc
您好我正在尝试使用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()
Run Code Online (Sandbox Code Playgroud)
错误:pyodbc.DataError:('22001','[22001] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]字符串或二进制数据将被截断.(8152)(SQLExecDirectW); [01000] [Microsoft] [ ODBC SQL Server驱动程序] [SQL Server]语句已终止.(3621)')
但是,当我手动插入值时.它工作正常
cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",'A','B','C','D')
Run Code Online (Sandbox Code Playgroud)
我确保数据库中存在TABLE,数据类型与我传递的数据一致.连接和光标也正确.行的数据类型是"列表"
Bry*_*yan 34
请考虑动态构建查询以确保占位符数与表和CSV文件格式匹配.然后,只需要确保您的表和CSV文件是正确的,而不是检查您?在代码中键入了足够的占位符.
以下示例假定
test.csvMyTable...
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()
Run Code Online (Sandbox Code Playgroud)
如果文件中未包含列名:
...
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49297 次 |
| 最近记录: |