2012-10-15 3 views
19

내가 우분투 12.04을 실행하고 좋아, 그래서 여기에 MySQL은 5.5 문제입니다 :MySQL의 LOAD 데이터 LOCAL INFILE 파이썬

파이썬, SQL 명령에 대한 MySQLDB 모듈 사용 :

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: Enable LOAD DATA LOCAL INFILE

+0

당신이 수정 한 후 MySQL을 다시 시작 했습니까 (언제 어디서나 문서에이를 찾을 수 없습니다) my.cnf? MySQL 콘솔을 사용하여 직접 실행하면 어떻게됩니까? –

+1

수정 후 MySQL을 다시 시작했지만 아무 것도 변경하지 않았습니다. 이 명령은 MySQL 콘솔에서 직접 실행할 때 작동합니다. 따라서 MySQLdb에서 문제가 있다고 가정합니다. – user1746082

답변

3

내가 볼 때, 어떤 파일 옵션 local-infile이 없습니다. 그러나 스크립트에서이 값을 동적으로 변경할 수 있습니다.

:

SET @@global.local_infile = 1; 

MySQL의 명령 줄 콘솔에서 테스트, 모든 것이 OK -

SELECT @@global.local_infile; 

하는 변수 사용이 문을 설정하려면 -

이 옵션을 실행이 쿼리를 보려면
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 
+0

MySQL 콘솔에서 이러한 쿼리를 실행했는데 효과가있었습니다 만 Python 코드에 행을 추가하여 local_infile 변수를 1로 변경합니다. ala : cursor.execute ("SELECT @@ global.local_infile = 1;") 아무 것도 변경되지 않았지만 여전히 1148 오류가 있습니다. – user1746082

+0

오류가 있습니까? 아니면 누군가 또는 무언가가이 깃발을 다시 재설정 했나요? 어쨌든 콘솔에서 작동한다면 모든 곳에서 작동해야합니다. – Devart

+1

중지 ... SELECT를 실행하면 안됩니다. SET 문을 사용하십시오! – Devart

61

지출 후 설정 파일에 설정을 모든 종류의 노력과 시간의 MySQL의 수십 다시 시작에 시간이 나는 문제를 해결하기 위해 보이는이 함께했다

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

감사합니다 !!! 나는 똑같은 문제가 있었다! 그 해결책이 효과가 있습니다. – Scoutman

+1

아주 좋았습니다. 그걸 발견하고 잠시 시간을내어 저를 위해 일합니다. –

+1

훌륭한 솔루션, 순수한 천재! 그리고'my.conf'를 편집하지 못하게합니다. – sadmicrowave