2012-10-15 51 views
19

我運行Ubuntu 12.04和MySQL 5.5 好吧所以這裏的問題是:MySQL的LOAD DATA LOCAL INFILE的Python

使用的Python,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。但是您可以在腳本中動態更改此值。

要查看該選項運行此查詢 -

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 
+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