Команда ODO в Python и как загрузить отсутствующие файлы из CSV как NULL с помощью простой команды

Я пытаюсь загрузить данные из CSV-файла в таблицу MySQL, используя odo в Python.

CSV-файл содержит пустые ячейки. Командные файлы odo, когда встречаются пустые ячейки.

Как я могу использовать команду odo для загрузки данных и вставить нулевое значение по умолчанию для пропущенных данных.

Я пытаюсь импортировать простой файл CSV, который я скачал из Quandl в таблицу MySQL с пакетом odo python

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, "Неверное десятичное значение:" для столбца "High" в строке 185") [SQL:" LOAD DATA INFILE %(путь)s\n INTO TABLE QUANDL_DATA_WIKI\ n CHARACTER SET% (кодировка)s\n ПОЛЯ \ n ЗАПРЕЩЕНЫ% (разделитель)s\n ЗАКЛЮЧЕНЫ%(quotechar)s\n ЗАБРОШЕНЫ%(escapechar)s\n ЛИНИИ, ПРЕКРАЩЕННЫЕ%(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 с помощью простой команды?

1 ответ

Решение

Если я сделаю все поля varchar(255), то пропущенные поля будут отображаться как ''. sqlalchemy не может форсировать '' из файла csv в другой тип данных.

Лучше всего использовать varchar для простого чтения файла CSV, а затем преобразовать его в надлежащие форматы

Другие вопросы по тегам