python – to_sql pyodbc count字段不正确或语法错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – to_sql pyodbc count字段不正确或语法错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2027字,纯文字阅读大概需要3分钟。
内容图文
我正在从api网站下载Json数据,并使用sqlalchemy,pyodbc和pandas的to_sql函数将该数据插入到MSSQL服务器中.
我可以下载最多10000行,但是我必须将chunksize限制为10,否则我会收到以下错误:
DBAPIError: (pyodbc.Error) (‘07002’, ‘[07002] [Microsoft][SQL Server
Native Client 11.0]COUNT field incorrect or syntax error (0)
(SQLExecDirectW)’) [SQL: ‘INSERT INTO [TEMP_producing_entity_details]
有大约5亿行可供下载,它只是以这种速度爬行.有关解决方法的任何建议吗?
谢谢,
解决方法:
更新:
pandas 0.23.1已经恢复了0.23.0中引入的问题变化.但是,原始性能的最佳解决方案仍然是CSV – > bcp方法如下所述.
更新:
大熊猫0.24.0显然已经重新引入了这个问题(参考号:here)
(原始答案)
在pandas版本0.23.0之前,to_sql将为DataTable中的每一行生成一个单独的INSERT:
exec sp_prepexec @p1 output,N'@P1 int,@P2 nvarchar(6)',
N'INSERT INTO df_to_sql_test (id, txt) VALUES (@P1, @P2)',
0,N'row000'
exec sp_prepexec @p1 output,N'@P1 int,@P2 nvarchar(6)',
N'INSERT INTO df_to_sql_test (id, txt) VALUES (@P1, @P2)',
1,N'row001'
exec sp_prepexec @p1 output,N'@P1 int,@P2 nvarchar(6)',
N'INSERT INTO df_to_sql_test (id, txt) VALUES (@P1, @P2)',
2,N'row002'
据推测,为了提高性能,pandas 0.23.0现在生成一个表值构造函数,以便每次调用插入多行
exec sp_prepexec @p1 output,N'@P1 int,@P2 nvarchar(6),@P3 int,@P4 nvarchar(6),@P5 int,@P6 nvarchar(6)',
N'INSERT INTO df_to_sql_test (id, txt) VALUES (@P1, @P2), (@P3, @P4), (@P5, @P6)',
0,N'row000',1,N'row001',2,N'row002'
问题是SQL Server存储过程(包括系统存储过程,如sp_prepexec)限制为2100个参数,因此如果DataFrame有100列,那么to_sql一次只能插入大约20行.
我们可以使用计算所需的chunksize
# df is an existing DataFrame
#
# limit based on sp_prepexec parameter count
tsql_chunksize = 2097 // len(df.columns)
# cap at 1000 (limit for number of rows inserted by table-value constructor)
tsql_chunksize = 1000 if tsql_chunksize > 1000 else tsql_chunksize
#
df.to_sql('tablename', engine, if_exists='replace', index=False, chunksize=tsql_chunksize)
但是,最快的方法仍然可能是:
>将DataFrame转储到CSV文件(或类似文件),然后
>让Python调用SQL Server bcp实用程序将该文件上载到表中.
内容总结
以上是互联网集市为您收集整理的python – to_sql pyodbc count字段不正确或语法错误全部内容,希望文章能够帮你解决python – to_sql pyodbc count字段不正确或语法错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。