首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql在set字段中加载数据的本地幼稚语法问题

问mysql在set字段中加载数据的本地幼稚语法问题
EN

Stack Overflow用户
提问于 2013-09-03 19:35:53
回答 1查看 13.4K关注 0票数 1

我试图使用mysql的LOAD DATA LOCAL INFILE语法将.csv文件加载到现有的表中。下面是我的.csv文件中的一条记录(带有头):

代码语言:javascript
复制
 PROD,       PLANT,PORD,  REVN,A_CPN,     A_CREV,BRDI,       DTE,     LTME
 100100128144,12T1,2070000,04,3DB18194ACAA,05_01,ALA13320004,20130807,171442

问题是,我希望在导入过程中多做3件事情:

  1. 在插入每一行时,应增加RECORDID INT非空AUTO_INTEGER PRIMARY_KEY字段(此表列和结构已存在于mysql表中)
  2. 应该将DTE和LTME连接起来,转换为mysql DATETIME格式,并插入到现有的名为TRANS_OCR的mysql列中。
  3. 应将CREATED时间戳字段设置为行插入上的当前unix时间戳(此表列和结构在mysql表中也已存在)

我试图使用以下命令将这些数据导入mysql表:

代码语言:javascript
复制
 LOAD DATA LOCAL INFILE 'myfile.csv' INTO TABLE seriallog
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
 LINES TERMINATED BY '\n'
 IGNORE 1 LINES
 (FLEX_PN, FLEX_PLANT, FLEX_ORDID, FLEX_REV, CUST_PN, CUST_REV, SERIALID)
 SET CREATED = CURRENT_TIMESTAMP;

我认为我已正确设置了CREATED列,但其他列正在发出mysql警告:

代码语言:javascript
复制
Warning: Out of range value for column 'FLEX_PN' at row 1
Warning: Row 1 was truncated; it contained more data than there were input columns

有人能帮我处理语法吗,LOAD DATA LOCAL INFILE模块让我很困惑.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-04 02:24:19

找出适当的语法来完成这项工作:

代码语言:javascript
复制
sql = """LOAD DATA LOCAL INFILE %s INTO TABLE seriallog_dev 
         FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' 
         LINES TERMINATED BY '\\n' 
         IGNORE 1 LINES 
         (FLEX_PN, FLEX_PLANT, FLEX_ORDID, FLEX_REV, CUST_PN, CUST_REV, SERIALID, @DTE, @LTME) 
         SET RECORDID = NULL, 
             TRANS_OCR = STR_TO_DATE(CONCAT(@DTE,'',@LTME), "%%Y%%m%%d%%H%%i%%s"), 
             CREATED = CURRENT_TIMESTAMP;"""

params = (file,)
self.db.query( sql, params )

请注意--这是用python的mysqldb模块完成的。

警告

这个解决方案的唯一问题是,由于某种原因,我的批量插入只能从我的文件中插入前217行数据。我的总文件大小是19 it,所以我无法想象它对于mysql缓冲区来说太大.那是怎么回事?

更多信息

此外,我刚刚在msyql-服务器CLI中直接尝试了这个语法,它适用于所有255条记录。因此,显然是python、python mysqldb模块或mysqldb模块建立的mysql连接存在一些问题.

DONE

我刚刚解决了这个问题,它与load data local命令无关,而是在尝试导入.dbf之前使用的将原始.csv文件转换为.csv的方法。由于某些原因,mysql导入方法在.csv上运行,然后.dbf到.csv转换方法完成--导致在.csv文件中找到部分数据集并导入.很抱歉浪费了大家的时间!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18600134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档