使用python将CSV文件写入SQL Server数据库

发布于 2021-01-29 18:58:05

嗨,我正在尝试使用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,数据类型与我传递的数据一致。连接和光标也正确。行的数据类型为“列表”

关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    考虑动态构建查询,以确保占位符的数量与表和CSV文件格式匹配。然后,只需确保您的表和CSV文件正确无误,而不必检查您?在代码中是否键入了足够的占位符。

    以下示例假定

    1. CSV文件在第一行中包含列名称
    2. 连接已建立
    3. 档案名称为 test.csv
    4. 表名是 MyTable
    5. 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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看