example - python mysql install offline
MySQL CARGAR DATOS LOCALES INFILES Python (3)
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:
Como veo, no hay opción de archivo local-infile . Pero puedes 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 declaración -
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
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)
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