Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSV数据通过Python上传到SQL表时出错_Python_Sql Server_Python 3.x_Pymssql - Fatal编程技术网

CSV数据通过Python上传到SQL表时出错

CSV数据通过Python上传到SQL表时出错,python,sql-server,python-3.x,pymssql,Python,Sql Server,Python 3.x,Pymssql,所以在过去的几天里,我一直在努力解决这个问题。我需要将一个包含大约25列和5万行的CSV文件上载到一个SQL Server表(zzzOracle_Extract)中,该表也包含25列、相同列名和相同顺序 这是CSV文件中的行的外观: ['M&M OPTICAL SHOP', '3001211', 'SHORE', '*', 'PO BOX 7891', '', '', '', 'GUAYNABO', 'GUAYNABO', 'PR', '0090', 'United States', '

所以在过去的几天里,我一直在努力解决这个问题。我需要将一个包含大约25列和5万行的CSV文件上载到一个SQL Server表(
zzzOracle_Extract
)中,该表也包含25列、相同列名和相同顺序

这是CSV文件中的行的外观:

['M&M OPTICAL SHOP', '3001211', 'SHORE', '*', 'PO BOX 7891', '', '', '', 'GUAYNABO', 'GUAYNABO', 'PR', '0090', 'United States', '24-NSH RETAIL CUSTOMER', 'SH02-SHORE COLUMN 2', '3001211', '*', '*', '*', '3001211744-BILL_TO', '', '', '', '', 'RACHAEL']
因此,总共有25列,其中一些值为空。也许这是造成错误的原因。这是我的密码:

import csv
import pymssql

conn = pymssql.connect(
    server="xxxxxxxxxx",
    port = 2433,
    user='SQLAdmin',
    password='xxxxx',
    database='NasrWeb'
)

with open('cleanNVG.csv','r') as f:
    reader = csv.reader(f)
    columns = next(reader)
    query = 'insert into dbo.zzzOracle_Extract({0}) Values({1})'
    query = query.format(','.join(columns),','.join('?' * len(columns)))
    cursor = conn.cursor()
    for data in reader:
        print(data) #What a row looks like
        cursor.execute(query,data)
    cursor.commit()

cursor.close()
print("Done")
conn.close()
执行脚本后,我得到的错误之一如下:

ValueError: 'params' arg (<class 'list'>) can be only a tuple or a dictionary.
ValueError:'params'arg()只能是元组或字典。
我的代码有什么问题?我真的很感谢你的帮助

如何将[]连接到代码中的每一列

所以你有点像

>>列=['ID'、'Last Name'、'First Name']
你现在正在使用

>,'.join(列)
'ID,姓,名'
但是现在需要将列名用方括号括起来。这可以通过以下方式实现:

>>,'.join('['+x+']'表示列中的x)
“[ID],[姓],[名]”

Try
cursor.execute(查询,元组(数据))
我厌倦了它,但它仍然抛出了一个错误和一个新的错误,(102,b“Name.DB Lib错误消息20018,严重性15:\n一般SQL Server错误:检查来自SQL Server的消息\n”),您的字段名中是否有空格?如果是这样的话,它们需要在SQL中用方括号括起来。@StevenRumbalski是的,我刚刚检查了完全相同的内容。我查看了我的SQL表设计,其中23列的数据类型为(nvarchar),另外2列的数据类型为numeric和float。这不可能吗?只是一个随机猜测。哦,好吧,我刚刚运行了print(Query)来提供我的查询的格式,它已经插入到dbo.zzzOracle_Extract中(客户名称、客户#、账户名称、识别地址标志、地址1、地址2、地址3、地址4、城市、县、州、邮政编码、国家、类别、类别、参考、参与方状态、地址状态、站点状态、收货方或收货方、默认仓库、默认订单类型、默认装运方式、Optifacts客户编号、销售人员)因此它缺少“[]“我相信感谢@Gord Thompson我为另一个join.query.format(','.join('['+x+']'表示列中的x),','.join(“%”+“s”表示列中的m))执行了此操作,因此现在我将查询放在括号中,并将查询值设置为25”%s“.然而,这是正确的,第二次连接中的#16必须是%f或浮点,我如何才能将其作为第二次连接的例外?@Cesar re:
%f
-我认为这没有必要。事实上,我认为它甚至不起作用。报告说“…由于格式和类型转换是在内部处理的,因此只支持
%s
%d
占位符。这两个占位符在功能上是等效的。”请尝试对所有占位符使用
%s