+-
使用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] [ ODBC SQL 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()
点击查看更多相关文章

转载注明原文:使用python将csv文件写入SQL Server数据库 - 乐贴网