【发布时间】:2021-05-26 07:59:07
【问题描述】:
我正在通过数据框中的 pandas 读取 csv 并希望将其写入 SQL Server:
with pd.read_csv(r"my.csv", sep=";", chunksize=4, usecols=['some', 'columns'...],encoding='cp1252') as reader:
reader
for chunk in reader:
# create db con
for index, row in chunk.iterrows():
cursor.execute('INSERT INTO myTable (some, columns ... ) VALUES (?,?...)', row['some'], row['column']...)
适用于简单的 csv 文件,如许多示例中所示。但是对于我更大的文件,我遇到了一些麻烦。尤其是数据类型和空值。
- 数据库中的列是字符串,但 CSV 中的值可以是 int、float、string 或 null。所以我这样做:
str(myValue)与 int 和 float 一起使用,但如果有 null,我会在我的数据库中得到一个“nan”而不是 null。如果没有str(),当从 csv 读取数值时,我会遇到数据类型错误。 - 与 csv 中的 Bool 值相同,表示为 0 和 1 以及 null。但是通过
bool(myBoolValue)的“nan”被转换为true。如果没有bool(),我会收到数据类型错误。 - 速度很慢。使用 pdi (kettle) 我得到约 1800 行/秒的数据库。这里可能只有 100 行/秒。
知道我该如何处理吗? 我可以在读取值时已经定义 DataType 吗?
【问题讨论】:
-
在写入数据库之前,pandas 中是否正在进行任何预处理。只是想知道我是否可以在没有熊猫的情况下直接将其丢弃
-
不,只是分块读取所需的列...
标签: python sql-server pandas csv