使用ODO python包将CSV加载到MySQL表中 - 日期错误1292

时间:2016-07-28 05:57:18

标签: python mysql csv sqlalchemy odo

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

t = odo('C:\ProgramData\MySQL\MySQL Server 5.6\Uploads\WIKI_20160725.partial.csv', 'mysql+pymysql://' + self._sql._user+':'
            + self._sql._password +'@localhost/testDB::QUANDL_DATA_WIKI')

第一行在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

MySQL表定义如下:

Ticker varchar(255) NOT NULL,
Date date 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)

它使用以下信息抛出异常1292:

sqlalchemy.exc.InternalError:(pymysql.err.InternalError)(1292,“错误的日期值:'7/25/2016',第1行的'日期'列'”[SQL:'LOAD DATA INFILE%(路径)s \ n INTO TABLE QUANDL_DATA_WIKI \ n字符集%(编码)s \ n FIELDS \ n终止%(分隔符)s \ n已包含%(quotechar)s \ n ESCAPED BY%(escapechar) s \ n LINES TERMINATED BY%(lineterminator)s \ n IGNORE%(skiprows)s LINES \ n'] [参数:{'path':'C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ Uploads \ WIKI_20160725.partial。 csv','quotechar':''','skiprows':0,'lineterminator':'\ r \ n','escapechar':'\','delimiter':',','encoding':'utf8 “}]

有没有人知道第一行中的日期有什么问题?它似乎与MySql数据库不匹配

1 个答案:

答案 0 :(得分:0)

mysql在日期转换方面存在问题。当我将日期字段定义为varchar

时,我注意到了
Date varchar(255) NOT NULL

然后正确读取了csv文件

在我的SQL中,字符串到日期格式的转换如下所示:

STR_TO_DATE(Date, "%m/%d/%Y")