22

我正在运行 Ubuntu 12.04 和 MySQL 5.5 好吧,这就是问题所在:

使用 Python 的 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 ]。这对我不起作用,我不知道为什么。

相关链接:

MySQL:启用 LOAD DATA LOCAL INFILE

4

3 回答 3

69

在花了几个小时尝试配置文件中的各种设置并重新启动 mysql 数十次之后,我想出了这个似乎解决了问题的方法(在任何地方的任何文档中都找不到这个)

MySQLdb.connect(server, username, password, database, local_infile = 1)
于 2012-10-31T09:13:07.947 回答
4

如我所见,没有文件选项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
于 2012-10-15T06:16:55.987 回答
0

我知道这是一个非常古老的线程,但我想我只是添加一些关于 Flask 的脚注。

我无法通过 LOAD DATA INFILE 将任何 csv 文件上传到 MySQL,因此我尝试使用 LOAD DATA LOCAL INFILE。我得到了上面提到的相同的“错误 1148:此 MySQL 版本不允许使用的命令”。

我对此的解决方案是打开 flaskext > mysql.py 并修改“连接”功能。我补充说:

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”

于 2018-09-18T04:30:58.833 回答