MySQL LOAD DATA LOCAL INFILE Python
Я запускаю Ubuntu 12.04 и MySQL 5.5
Итак, вот проблема:
Используя модуль MySQLDB для Python, команда SQL:
cursor.execute("LOAD DATA LOCAL INFILE 'example.csv' INTO TABLE 'example_mysql_table' TERMINATED BY ',';")
Не работает. Я получаю ERROR 1148: The used command is not allowed with this MySQL version
Я искал решение для этого какое-то время, и до сих пор кажется, что другие люди, имеющие одну и ту же проблему, исправили это, добавив "local-infile = 1" в "my.cnf" под [mysqld] и [mysql]. Это не сработало для меня, и я не уверен, почему.
Соответствующая ссылка:
MySQL: включить LOAD DATA LOCAL INFILE
Ответы
Ответ 1
Потратив часы на попытки всех настроек в конфигурационных файлах и перезагружая mysql десятки раз, я придумал это, что, кажется, решает проблему (не мог найти это нигде в документации)
MySQLdb.connect(server, username, password, database, local_infile = 1)
Ответ 2
Как я вижу, файл local-infile отсутствует. Но вы можете изменить это значение динамически в script.
Чтобы просмотреть эту опцию, запустите этот запрос -
SELECT @@global.local_infile;
Чтобы установить переменную, используйте этот оператор -
SET @@global.local_infile = 1;
Протестировано в консоли командной строки MySQL, все в порядке:
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