【发布时间】:2020-10-18 16:00:12
【问题描述】:
我正在尝试将 .CSV 文件批量插入 SQL Server,但没有取得多大成功。
一点背景:
1. 我需要将 1600 万条记录插入 SQL Server (2017) 数据库。每条记录有 130 列。我在.CSV 中有一个字段,来自我们的一个供应商的 API 调用,我不允许提及。我有整数、浮点数和字符串数据类型。
2. 我尝试了通常的方法:BULK INSERT,但我无法通过数据类型错误。我发布了一个问题here,但无法解决问题。
3. 我尝试使用 python 进行试验,并尝试了我能找到的所有方法,但 pandas.to_sql 对每个人都警告说它非常慢。我遇到了数据类型和字符串截断错误。与BULK INSERT的不同。
4. 没有太多选择,我尝试了pd.to_sql,虽然它没有引发任何数据类型或截断错误,但由于我的 tmp SQL 数据库空间不足而失败。尽管我有足够的空间并且我的所有数据文件(和日志文件)都设置为无限制的自动增长,但我也无法传递此错误。
我当时就卡住了。我的代码(pd.to_sql 部分)很简单:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://@myDSN")
df.to_sql('myTable', engine, schema='dbo', if_exists='append',index=False,chunksize=100)
我不确定还有什么可以尝试的,欢迎任何建议。我见过的所有代码和示例都处理小型数据集(列不多)。我愿意尝试任何其他方法。我将不胜感激。
谢谢!
【问题讨论】:
-
Stack Overflow 是一个问答网站。回答自己的问题并没有错,但是,不要在问题中发布答案和问题。这实际上缺少一个问题,并且像博客一样写;这不是堆栈溢出的用途。如果您确实想分享您尝试解决的问题以及完全受欢迎的答案,但您需要通过发布可回答的问题,然后您自己的答案作为答案来做到这一点。
-
为了符合 StackOverflow 的格式,您可以同时编写问题和答案
-
好吧,让我编辑这个。做到这一点!谢谢!
-
参见Can I answer my own question? 和(更重要的是)链接的博客It’s OK to Ask and Answer Your Own Questions。就目前而言,这更有可能被锁定并收到反对票,因为它不符合 Stack Exchange 网络和 Stack Overflow 的问题指南。
-
谢谢@Larnu。我改变了格式:分开的问题和答案。我可以删除整个帖子。我只是想分享。
标签: python sql-server pandas bulkinsert pandas-to-sql