簡體   English   中英

MySQL LOAD DATA LOCAL INFILE Python

[英]MySQL LOAD DATA LOCAL INFILE Python

我正在運行Ubuntu 12.04和MySQL 5.5好吧所以這是問題所在:

使用MySQL的MySQLDB模塊,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

我已經尋找了一段時間的解決方案,到目前為止,似乎其他有同樣問題的人通過在[mysqld]和[mysql]下面的'my.cnf'添加“local-infile = 1”來修復它]。 這對我沒用,我不知道為什么。

相關鏈接:

MySQL:啟用LOAD DATA LOCAL INFILE

花了好幾個小時在配置文件中嘗試各種設置並重啟mysql幾十次我想出了這個似乎解決了這個問題(在任何文檔中都找不到這個)

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

正如我所見,沒有文件選項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

我知道這是一個非常古老的主題,但我想我只是添加一個關於Flask的小腳注。

我無法通過LOAD DATA INFILE將任何csv文件上傳到MySQL,因此我嘗試使用LOAD DATA LOCAL INFILE。 我得到了相同的'ERROR 1148:上面提到的這個MySQL版本不允許使用的命令。

我的解決方案是打開flaskext> mysql.py並修改'connect'功能。 我補充說:

if self.app.config['MYSQL_LOCAL_INFILE']:
    self.connect_args['local_infile'] = self.app.config['MYSQL_LOCAL_INFILE']

然后我補充說:

app.config['MYSQL_LOCAL_INFILE'] = True

到我的燒瓶模塊。 這有效地允許在使用flaskext.mysql時將pymysql的local_infile選項設置為“True”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM