MySQL CARGAR DATOS LOCALES INFILES Python

Estoy ejecutando Ubuntu 12.04 y MySQL 5.5. Bien, este es el problema:

Usando el módulo MySQLDB para Python, el comando SQL:

cursor.execute("LOAD DATA LOCAL INFILE 'example.csv' INTO TABLE 'example_mysql_table' TERMINATED BY ',';") 

No funciona Obtengo ERROR 1148: The used command is not allowed with this MySQL version

He buscado una solución para esto por un tiempo, y hasta ahora parece que otras personas que tienen el mismo problema lo han solucionado agregando “local-infile = 1” a ‘my.cnf’ debajo de [mysqld] y [mysql ]. Esto no me ha funcionado, y no estoy seguro de por qué.

Enlace relevante:

MySQL: Habilitar DATOS LOCALES DE LA CARGA

Después de pasar horas probando todo tipo de configuraciones en los archivos de configuración y reiniciando mysql docenas de veces se me ocurrió esto, lo que parece resolver el problema (no se pudo encontrar en ninguna documentación).

 MySQLdb.connect(server, username, password, database, local_infile = 1) 

Como veo, no hay opción de archivo local-infile . Pero puede cambiar este valor dinámicamente en un script.

Para ver esta opción ejecute esta consulta –

 SELECT @@global.local_infile; 

Para establecer la variable use esta statement –

 SET @@global.local_infile = 1; 

Probado en la consola de línea de comandos de MySQL, todo está bien:

 SET @@GLOBAL.local_infile = 1; LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE table1; Query OK, 3 rows affected (0.06 sec) SET @@GLOBAL.local_infile = 0; LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE table1; ERROR 1148 (42000): The used command is not allowed with this MySQL version 

Sé que este es un tema muy antiguo, pero pensé que solo añadiría una pequeña nota a pie de página con respecto a Flask.

No pude cargar ningún archivo csv a MySQL a través de LOAD DATA INFILE, así que intenté usar LOAD DATA LOCAL INFILE. Obtuve el mismo ‘ERROR 1148: el comando usado no está permitido con esta versión de MySQL’ mencionado anteriormente.

Mi solución a esto fue abrir flaskext> mysql.py y modificar la función ‘conectar’. Yo añadí:

 if self.app.config['MYSQL_LOCAL_INFILE']: self.connect_args['local_infile'] = self.app.config['MYSQL_LOCAL_INFILE'] 

Luego agregué:

 app.config['MYSQL_LOCAL_INFILE'] = True 

a mi módulo matraz. Esto permite efectivamente que la opción local_infile de pymysql se configure en ‘Verdadero’ cuando se usa flaskext.mysql