2016-12-08 83 views
3

我使用MySQL 5.5.53-0ubuntu0.14.04.1,和Julia 0.5.0版MySQL的LOAD DATA LOCAL INFILE朱莉婭

在我的朱莉婭腳本,我使用

conn = MySQL.mysql_connect(host, username, password, database) 

command = string("LOAD DATA LOCAL INFILE 'infile' INTO TABLE temp_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';") 

MySQL.mysql_execute(conn, command) 

我錯誤消息「使用的命令不允許使用此MySQL版本」

該命令在我直接在MySQL控制檯上運行時發揮作用,所以我認爲這是Julia MySQL.mysql_connect的問題。

看起來像Python有類似的問題,下面的語法解決了這個問題。 MySQL LOAD DATA LOCAL INFILE Python

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

我不知道我應該怎麼做這個朱莉婭?

+0

根據這個,問題可能是你的mysql服務器沒有配置爲允許local-infile。您可能需要更改您的my.cnf文件,如以下鏈接所示:http://stackoverflow.com/questions/10762239/mysql-enable-load-data-local-infile –

+0

至於爲茱莉亞客戶端設置選項,最接近的是'MySQL.mysql_options(conn,Dict(MySQL.MYSQL_OPT_LOCAL_INFILE => 1));'這引發了一個內部的mysql錯誤,但看起來非常接近;如果你正確地配置你的mysqld可能會工作 –

+1

@Tasos Papastylianou,在我發佈這個問題之前,我的my.cnf文件已經被配置爲允許local-infile,我認爲這個配置使得命令直接在MySQL控制檯上運行。您的以下答案解決了我的問題。非常感謝你!! – Nina

回答

1

我認爲適當的SQL語句我有:

import MySQL; 

conn = MySQL.mysql_connect(host, username, password, database; opts = Dict(MySQL.MYSQL_OPT_LOCAL_INFILE=>1)); 

command = string("LOAD DATA LOCAL INFILE 'infile' INTO TABLE temp_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';") 

MySQL.mysql_execute(conn, command) 

請確認。 :)


PS:如上面註釋中,您可能需要啓用你的MySQL服務器配置第一本地INFILE,如前所述here

+0

這個工程!非常感謝!!!你是怎麼弄出這個sytax的?這是朱莉婭的任何文件嗎? – Nina

+0

那麼'MySQL.mysql_connect'的文檔暗示了一個可選的'opts'關鍵字參數,並且'MySQL.mysql_options'的文檔暗示這是一個字典的形式。但是,我花了一段時間,很多幸運/受過教育的猜測纔到達那裏; (例如,我必須弄清楚模塊導出了一個MySQL.MYSQL_OPT_LOCAL_INFILE常量 - 有些問題涉及到這個問題:p)。我會同意這些文件有很多不足之處:p –

1

將此作爲答案而不是評論重新發布,因爲特定代碼段在評論中斷了。

如果您能夠使用底層操作系統設施,並且假設您已安裝mysql客戶端,並且您要做的是從文件填充數據庫,作爲解決方法,您可以將文件內容直接導入到數據庫:

run(pipeline(`mysql -hhost -uusername -ppassword db_name`; stdin="data.sql")) 

(更換主機,用戶名,密碼,DB_NAME和文件名如適用)


PS。我不太熟悉sql中的「INFILE」選項。如果輸入的是不是一個.sql文件,但.csv文件,你可以在處理該朱莉婭文件來生成手動執行,而不是