Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql load data problèmes de syntaxe de fichier local avec des champs définis

J'ai trouvé la syntaxe appropriée pour que cela fonctionne :

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 )

Attention, cela se fait avec le module mysqldb de python.

MISE EN GARDE

Le seul problème avec cette solution est que, pour une raison quelconque, mon insertion en bloc n'insère que les 217 premières lignes de données de mon fichier. La taille totale de mon fichier est de 19 Ko, donc je ne peux pas imaginer qu'il soit trop volumineux pour les tampons mysql... alors qu'est-ce que ça donne ?

plus d'informations

De plus, je viens d'essayer cette syntaxe directement dans la CLI msyql-server et cela fonctionne pour les 255 enregistrements. Donc, évidemment, c'est un problème avec python, le module python mysqldb ou la connexion mysql que le module mysqldb établit...

TERMINÉ

J'ai JUSTE compris le problème, cela n'avait rien à voir avec la commande load data local infile mais plutôt avec la méthode que j'utilisais pour convertir mon fichier .dbf d'origine en .csv avant d'essayer d'importer le .csv. Pour une raison quelconque, la méthode d'importation mysql s'exécutait sur le .csv avant la fin de la méthode de conversion de .dbf en .csv - ce qui a entraîné la découverte d'un ensemble de données partiel dans le fichier .csv et son importation... désolé de faire perdre du temps à tout le monde !