Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql carrega problemas de sintaxe de arquivo local de dados com campos definidos


Descobri a sintaxe adequada para fazer isso funcionar:
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 )

Lembre-se - isso é feito com o módulo mysqldb do python.

AVISO

O único problema com esta solução é que, por algum motivo, minha inserção em massa insere apenas as primeiras 217 linhas de dados do meu arquivo. Meu tamanho total de arquivo é de 19 KB, então não posso imaginar que seja muito grande para os buffers do mysql ... então o que dá?

mais informações

Além disso, acabei de tentar essa sintaxe diretamente na CLI do msyql-server e funciona para todos os 255 registros. Então, obviamente, é algum problema com o python, o módulo python mysqldb ou a conexão mysql que o módulo mysqldb faz ...

CONCLUÍDO

Acabei de descobrir o problema, não tinha nada a ver com o comando load data local infile, mas sim com o método que eu estava usando para converter meu arquivo .dbf original para o .csv antes de tentar importar o .csv. Por alguma razão o método de importação do mysql estava rodando no .csv antes do método de conversão de .dbf para .csv terminar -- resultando em um conjunto de dados parcial sendo encontrado no arquivo .csv e importado... desculpe perder o tempo de todos!