MySQL LOAD DATA LOCAL INFILE Python

时间:2012-10-15 06:02:49

标签: python mysql

我正在运行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]下面的“my.cnf”添加“local-infile = 1”来修复它和[mysql]。这对我没有用,我不确定为什么。

相关链接:

MySQL: Enable LOAD DATA LOCAL INFILE

3 个答案:

答案 0 :(得分:66)

花了好几个小时在配置文件中尝试各种设置并重启mysql几十次我想出了这个似乎解决了这个问题(在任何文档中都找不到这个)

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

答案 1 :(得分: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

答案 2 :(得分:0)

我知道这是一个非常老的话题,但是我想我只添加一个关于Flask的脚注。

我无法通过LOAD DATA INFILE将任何csv文件上传到MySQL,因此我尝试使用LOAD DATA LOCAL INFILE。我得到了上面提到的相同的“错误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”