Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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
Python 如何使用pyodbc将数据框中的列插入SQL Server?_Python_Sql_Pandas_Pyodbc - Fatal编程技术网

Python 如何使用pyodbc将数据框中的列插入SQL Server?

Python 如何使用pyodbc将数据框中的列插入SQL Server?,python,sql,pandas,pyodbc,Python,Sql,Pandas,Pyodbc,我正在尝试将CSV或数据框中的数据插入MS SQL Server。 表已经创建,我使用pyodbc在SQL中创建了列 我试图用DataFrame中的一列填充表中的第一列,但出现以下错误: 错误:“07002”,“[07002][Microsoft][ODBC SQL Server驱动程序]计数字段不正确或语法错误0 SQLExecDirectW” 我尝试添加一个不同的列,以查看该特定列是否存在问题,我得到了相同的错误。列中没有空值 conn=pyodbc.connectDriver={SQLSe

我正在尝试将CSV或数据框中的数据插入MS SQL Server。 表已经创建,我使用pyodbc在SQL中创建了列

我试图用DataFrame中的一列填充表中的第一列,但出现以下错误:

错误:“07002”,“[07002][Microsoft][ODBC SQL Server驱动程序]计数字段不正确或语法错误0 SQLExecDirectW”

我尝试添加一个不同的列,以查看该特定列是否存在问题,我得到了相同的错误。列中没有空值

conn=pyodbc.connectDriver={SQLServer}; 服务器=NATSQLDVAP2NCR\ins2; 数据库=ECDWDEV; 可信连接=是; 对于df.iloc[:,0]中的i: insert\u query1=插入表\u名称列\u名称 价值观 光标=连接光标 结果=cursor.executeinsert_query1 康涅狄格州 应将df.iloc[:,0]列中的所有值插入SQL表\u名称中的列\u名称中

取而代之的是:

错误:“07002”,“[07002][Microsoft][ODBC SQL Server驱动程序]计数字段不正确或语法错误0 SQLExecDirectW”


您收到该错误消息是因为您试图使用参数化查询,但没有将参数值传递给execute方法

此外,您不需要通过在显式for循环中调用execute来逐行插入。您可以改用ExecuteMy:

测试数据 df=pd.DataFrame [1,'Josh',10000,2,'Michael',5000,3,'Sara',8000], 列=['id'、'name'、'salary'] crsr=cnxn.cursor crsr.fast\u executemany=True sql=插入到表\u 1 id值中 提取列并转换为单值元组列表 数据=[x,对于df['id']] crsr.executemanysql,数据 提交
将数据从PYODBC推送到SQL是一个非常糟糕的主意。我会找到另一个解决办法。例如保存CSV并手动上传,或者从Python中使用一些有效的批量上传方法。你没有用i做任何事情,你只是运行insert_query1的次数与df中的行数相同。这就是你想要做的吗?@FatihAkici为什么这是个坏主意?什么批量上传方法更好?@it's-yer-boy-chet理想情况下,我只需一次加载整个列,最好的方法是什么?我得到一个错误IntegrityError:'23000',[23000][Microsoft][ODBC SQL Server Driver][SQL Server]无法在列中插入空值。仅供参考,数据中没有空值。“id”是SQL中列的名称吗?在dataframe中,“id”是SQL中列的名称吗?在数据帧中在上面的示例代码中,是的,通常我们会尝试让列名在两端都相同,但这并不是严格必要的。至于NULL,列中必须有映射到sqlnull的内容,可能是NaN。A会很有帮助的。