0

我尝试在 python 中使用 odo 将数据从 csv 文件加载到 mysql 表中。

csv 文件包含空白单元格。odo 命令在遇到空白单元格时文件。

如何使用 odo 命令加载数据并默认为丢失的数据插入空值。

我正在尝试使用 odo python 包将从 Quandl 下载的简单 CSV 文件导入 MySQL 表

t = odo(csvpathName)

rsow 在 CSV 中看起来像这样。第二行缺少一个值。

A   7/25/2016   46.49   46.52   45.92   46.14   1719772 0   1   46.49   46.52   45.92   46.14   1719772
B   7/25/2016   46.49   46.52   45.92           1719772 0   1   46.49   46.52   45.92   46.14   1719772

MySQL表定义如下:

Ticker varchar(255) NOT NULL,
Date varchar(255) NOT NULL,
Open numeric(15,2) NULL,
High numeric(15,2) NULL,
Low numeric(15,2) NULL,
Close numeric(15,2) NULL,
Volume bigint NULL,
ExDividend numeric(15,2), 
SplitRatio int NULL,
OpenAdj numeric(15,2) NULL,
HighAdj numeric(15,2) NULL,
LowAdj numeric(15,2) NULL,
CloseAdj numeric(15,2) NULL,
VolumeAdj bigint NULL,
PRIMARY KEY(Ticker,Date)

它会引发异常 1366,其中包含以下信息:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, "不正确的十进制值: '' for column 'High' at row 185") [SQL: 'LOAD DATA INFILE %(path)s\n INTO TABLE QUANDL_DATA_WIKI\ n 字符集 %(encoding)s\n FIELDS\n TERMINATED BY %(delimiter)s\n ENCLOSED BY %(quotechar)s\n ESCAPED BY %(escapechar)s\n LINES TERMINATED BY %(lineterminator)s\n IGNORE %(skiprows)s LINES\n '] [参数:{'quotechar': '"', 'encoding': 'utf8', 'path': 'C:\ProgramData\MySQL\MySQL Server 5.6\Uploads\WIKI_20160725 .partial.csv', 'lineterminator': '\n', 'escapechar': '\', 'skiprows': 0, 'delimiter': ','}]

有谁知道如何配置 ODO,以便我可以使用简单的命令将缺失值作为 NULL 值上传?

4

1 回答 1

0

如果我将所有字段设为 varchar(255),那么它将丢失的字段读取为“”。sqlalchemy 无法将 csv 文件中的“”强制转换为另一种数据类型。

最好是使用 varchar 纯粹读取 csv 文件,然后将其转换为正确的格式

于 2016-08-16T20:49:31.103 回答