2016-08-16 62 views
0

我嘗試從python中使用odo將csv文件中的數據加載到mysql表中。Python中的ODO命令以及如何使用簡單的命令將NULL從CSV中上傳爲NULL

csv文件包含空白單元格。遇到空白單元格時的odo命令文件。

如何使用odo命令加載數據併爲缺失的數據默認插入空值。

我試圖導入我從Quandl下載到MySQL表與ODO Python包

t = odo(csvpathName) 

的rsow這個樣子的在CSV一個簡單的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,「不正確的十進制值:''在第185行'列'高')[SQL:'LOAD DATA INFILE%(path)s \ n INTO TABLE QUANDL_DATA_WIKI \ n CHARACTER SET%(encoding)s \ n FIELDS \ n %(分隔符)s \ n ENCLOSED BY%(quotechar)s \ n ESCAPED BY%(escapechar)s \ n LINES TER MINATE 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值?

回答

0

如果我製作所有字段varchar(255),那麼它會讀取缺少的字符作爲''。 sqlalchemy不能強制csv文件中的''變成另一種數據類型。

最好是使用varchar純粹讀取csv文件,然後將其轉換爲適當的格式