如何使用golang导入/加载/运行mysql文件?

时间:2018-03-15 14:48:14

标签: mysql go

我正在尝试使用此golang语句运行/加载sql文件到mysql数据库,但这不起作用:

exec.Command("mysql", "-u", "{username}", "-p{db password}", "{db name}", "<", file abs path )

但是当我在Windows命令提示符下使用以下命令时,它工作正常。

mysql -u {username} -p{db password} {db name} < {file abs path}

那么问题是什么?

3 个答案:

答案 0 :(得分:2)

正如其他人已经回答的那样,您无法使用<重定向运算符,因为exec没有使用shell。

但是您不必重定向输入以读取SQL文件。您可以将参数传递给MySQL客户端以使用其source命令。

exec.Command("mysql", "-u", "{username}", "-p{db password}", "{db name}",
    "-e", "source {file abs path}" )

source命令是MySQL客户端的内置命令。见https://dev.mysql.com/doc/refman/5.7/en/mysql-commands.html

答案 1 :(得分:1)

Go的exec.Command将第一个参数作为程序运行,其余参数作为参数。 '&lt;'被解释为文字参数。

e.g。 exec.Command("cat", "<", "abc")是bash中的以下命令:cat \< abc

要做你想做的事,你有两个选择。

bash版本的问题是在不同的操作系统之间无法移植。它不适用于Windows。

答案 2 :(得分:1)

Go os.exec package不使用shell,不支持重定向:

  

与来自C和其他语言的“系统”库调用不同,os / exec包有意不会调用系统shell,也不会扩展任何glob模式或处理通常由shell完成的其他扩展,管道或重定向。 / p>

您可以显式调用shell以将参数传递给它:

cmd := exec.Command("/bin/sh", yourBashCommand)

根据您正在做的事情,编写一个简短的bash脚本并从Go调用它可能会有所帮助。