我正在尝试将 .CSV
文件批量插入到 SQL Server 中,但没有成功。
一点背景:
1. 我需要将 1600 万条记录插入到 SQL Server (2017) 数据库中。每条记录有 130 列。我在 .CSV
中有一个字段来 self 们的一个供应商的 API 调用,我不允许提及。我有整数、 float 和字符串数据类型。
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)
我不太确定还能尝试什么,欢迎提供任何建议。我见过的所有代码和示例都处理小数据集(列数不多)。我愿意尝试任何其他方法。如有任何指点,我将不胜感激。
谢谢!
最佳答案
我只是想分享这段肮脏的代码,以防它能帮助到其他人。请注意,我非常清楚这根本不是最佳选择,它很慢,但我能够在十分钟内插入大约 1600 万条记录,而不会使我的机器过载。
我试着小批量地做:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("mssql+pyodbc://@myDSN")
a = 1
b = 1001
while b <= len(df):
try:
df[a:b].to_sql('myTable', engine, schema='dbo', if_exists='append',index=False,chunksize=100)
a = b + 1
b = b + 1000
except:
print(f'Error between {a} and {b}')
continue
丑得要命但对我有用。
我对所有批评和建议持开放态度。正如我所提到的,我发布这篇文章是为了防止它对其他人有所帮助,同时也期待收到一些建设性的反馈。
关于python - CSV 到 SQL Server : bulk import nightmare (T-SQL and/or Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64415392/