【问题标题】:MySQL LOAD DATA LOCAL INFILE JuliaMySQL LOAD DATA LOCAL INFILE 朱莉娅
【发布时间】:2016-12-08 16:09:16
【问题描述】:

我正在使用 MySql 5.5.53-0ubuntu0.14.04.1 和 Julia 版本 0.5.0

在我的 julia 脚本中,我正在使用

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)

我想知道我应该如何处理 Julia?

【问题讨论】:

  • 据此,问题可能在于您的 mysql 服务器未配置为允许 local-infile。您可能需要更改 my.cnf 文件,如下链接:stackoverflow.com/questions/10762239/…
  • 至于为 julia 客户端设置选项,我最接近的是MySQL.mysql_options(conn, Dict(MySQL.MYSQL_OPT_LOCAL_INFILE=>1) );,它引发了一个内部 mysql 错误,但似乎非常接近;如果您正确配置 mysqld 可能会起作用
  • @Tasos Papastylianou ,在我发布这个问题之前,我的 my.cnf 文件已经配置为允许 local-infile,我认为当我直接在 MySQL 控制台上运行它时,这个配置可以使命令工作。您的以下回答解决了我的问题。非常感谢!!
  • 是的,我认为[mysql]下的条目允许您的mysql客户端使用此功能,但是[mysqld]也需要它,以便服务器也配置它。 julia 客户端是独立的,所以这个选项必须在 MySQLHandle 对象的构造过程中独立地传递给 connect 命令。

标签: mysql julia bulk-load


【解决方案1】:

我想我有它:

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-server 配置中启用 local-infile,如 here 所述。

【讨论】:

  • 这行得通!非常感谢!!!你是怎么想出这个语法的?这在 Julia 的任何文件中吗?
  • 好吧,MySQL.mysql_connect 的文档暗示了一个可选的 opts 关键字参数,MySQL.mysql_options 的文档暗示这是字典的形式。但是我花了一段时间和很多幸运/有根据的猜测才到达那里; (例如,我必须弄清楚模块导出了一个 MySQL.MYSQL_OPT_LOCAL_INFILE 常量——需要一些 grepping 来解决这个问题:p)。我同意文档还有很多不足之处:p
【解决方案2】:

将此作为答案而不是评论重新发布,因为特定代码 sn-p 在 cmets 中中断。

如果您能够使用底层操作系统工具,并且假设您安装了 mysql 客户端并且您正在尝试从文件填充数据库,那么作为一种解决方法,您可以将文件的内容直接通过管道传输到您的数据库:

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

(根据需要替换主机、用户名、密码、db_name 和文件名)


PS。我对sql中的“INFILE”选项不太熟悉。如果输入不是 .sql 文件而是 .csv 文件,您可以在 julia 中处理该文件以生成适当的 sql 语句以供手动执行

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2012-06-01
    • 2020-07-25
    • 2013-01-24
    • 1970-01-01
    • 2018-11-27
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多