sql >> Base de Datos >  >> RDS >> Mysql

problemas de sintaxis de archivo local de datos de carga mysql con campos establecidos

Descubrí la sintaxis adecuada para que esto funcione:

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 )

Eso sí, esto se hace con el módulo mysqldb de python.

ADVERTENCIA

El único problema con esta solución es que, por alguna razón, mi inserción masiva solo inserta las primeras 217 filas de datos de mi archivo. El tamaño total de mi archivo es de 19 KB, así que no puedo imaginar que sea demasiado grande para los búferes de mysql... entonces, ¿qué ocurre?

más información

Además, acabo de probar esta sintaxis directamente dentro de la CLI del servidor msyql y funciona para los 255 registros. Entonces, obviamente es un problema con python, el módulo mysqldb de python, o la conexión mysql que hace el módulo mysqldb...

HECHO

SOLO descubrí el problema, no tenía nada que ver con el comando de archivo local de carga de datos, sino con el método que estaba usando para convertir mi archivo .dbf original en .csv antes de intentar importar el .csv. Por alguna razón, el método de importación de mysql se estaba ejecutando en .csv antes de que terminara el método de conversión de .dbf a .csv, lo que resultó en que se encontrara un conjunto de datos parcial en el archivo .csv y se importara... ¡perdón por hacer perder el tiempo a todos!