2012-10-15 134 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