使用 Python 将 CSV 文件导入 SQL Server

Ces*_*sar 5 python pymssql python-3.x

我在将 CSV 文件上传到 MS SQL Server 中的表时遇到问题,CSV 文件有 25 列,标题与 SQL 中的表同名,该表也有 25 列。当我运行脚本时,它会引发错误

params arg (<class 'list'>) can be only a tuple or a dictionary
Run Code Online (Sandbox Code Playgroud)

将此数据导入 MS SQL 的最佳方法是什么?CSV 和 SQL 表都具有完全相同的列名。

这是代码:

import csv
import pymssql

conn = pymssql.connect(
    server="xx.xxx.xx.90",
    port = 2433,
    user='SQLAdmin',
    password='xxxxxxxx',
    database='NasrWeb'
)

cursor = conn.cursor()
customer_data = csv.reader('cleanNVG.csv') #25 columns with same header as SQL

for row in customer_data:
    cursor.execute('INSERT INTO zzzOracle_Extract([Customer Name]\
      ,[Customer #]\
      ,[Account Name]\
      ,[Identifying Address Flag]\
      ,[Address1]\
      ,[Address2]\
      ,[Address3]\
      ,[Address4]\
      ,[City]\
      ,[County]\
      ,[State]\
      ,[Postal Code]\
      ,[Country]\
      ,[Category ]\
      ,[Class]\
      ,[Reference]\
      ,[Party Status]\
      ,[Address Status]\
      ,[Site Status]\
      ,[Ship To or Bill To]\
      ,[Default Warehouse]\
      ,[Default Order Type]\
      ,[Default Shipping Method]\
      ,[Optifacts Customer Number]\
      ,[Salesperson])''VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,)',row)

conn.commit()
cursor.close()
print("Done")
conn.close()
Run Code Online (Sandbox Code Playgroud)

这是 CSV 文件的第一行的样子

在此处输入图片说明

Gor*_*son 2

您使用csv.reader方法不正确。第一个参数.reader不是 CSV 文件的路径,而是

\n\n
\n

[an] 支持迭代器协议并在每次调用其方法时返回字符串的__next__()对象 \xe2\x80\x94 文件对象和列表对象都适合。

\n
\n\n

因此,根据文档中的示例,您应该执行以下操作:

\n\n
import csv\nwith open(\'cleanNVG.csv\', newline=\'\') as csvfile:\n    customer_data = csv.reader(csvfile)\n    for row in customer_data:\n        cursor.execute(sql, tuple(row))\n
Run Code Online (Sandbox Code Playgroud)\n