sql >> Database teknologi >  >> RDS >> Mysql

mysql indlæs data lokale infile syntaksproblemer med indstillede felter

Fandt ud af den rigtige syntaks for at få dette til at fungere:

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 )

Husk - dette gøres med pythons mysqldb-modul.

ADVARSEL

Det eneste problem med denne løsning er, at mit bulk-indsæt af en eller anden grund kun indsætter de første 217 rækker af data fra min fil. Min samlede filstørrelse er 19KB, så jeg kan ikke forestille mig, at den er for stor til mysql-bufferne... så hvad giver det?

flere oplysninger

Jeg har også lige prøvet denne syntaks direkte i msyql-server CLI, og den virker for alle 255 poster. Så det er åbenbart et problem med python, python mysqldb-modulet eller mysql-forbindelsen, som mysqldb-modulet laver...

UDFØRT

Jeg fandt LIGE ud af problemet, det havde intet at gøre med kommandoen load data local infile, men snarere den metode, jeg brugte til at konvertere min originale .dbf-fil til .csv, før jeg forsøgte at importere .csv. Af en eller anden grund kørte mysql-importmetoden på .csv, før konverteringsmetoden .dbf til .csv blev afsluttet - hvilket resulterede i, at et delvist datasæt blev fundet i .csv-filen og importeret... beklager at spilde alles tid!




  1. Java EE/JPA måde at tilføje nye tabeller/enheder til databasen

  2. SQL / Doctrine:Left Join problem

  3. Overvågning af transaktionslog

  4. Optimal måde at opbevare/hente array i tabel