我正在尝试使用此golang语句将sql文件运行/加载到mysql数据库中,但这不起作用:
1 | exec.Command("mysql","-u","{username}","-p{db password}","{db name}","<", file abs path ) |
但是当我在Windows命令提示符下使用以下命令时,ita工作正常。
1 | mysql -u {username} -p{db password} {db name} < {file abs path} |
那是什么问题?
- 尝试exec.Command(" C "," mysql","-u"," {用户名}","-p {db密码}"," {db名称}"," <",文件abs路径)。跑()
- " C "-此字符串代表什么?
- 如果我没记错的话,它从C驱动器运行cmd,因为它解决了我的问题
正如其他人回答的那样,您不能使用
但是您不必重定向输入即可读取SQL文件。您可以将参数传递给MySQL客户端以使用其
1 2 | exec.Command("mysql","-u","{username}","-p{db password}","{db name}", "-e","source {file abs path}" ) |
Go的
Unlike the"system" library call from C and other languages, the os/exec package intentionally does not invoke the system shell and does not expand any glob patterns or handle other expansions, pipelines, or redirections typically done by shells.
您可以显式调用该外壳以将参数传递给它:
1 | cmd := exec.Command("/bin/sh", yourBashCommand) |
根据您的操作,编写简短的bash脚本并从Go调用它可能会有所帮助。
- 我是Windows用户。
-
是的,那么
bash 不适合您。我假设有一些现代有用的shell命令可以在Windows中调用-或可以运行的Shell脚本文件-但我不是Windows专家。 Mysql的source (以上)可能是解决您问题的最简单方法。希望您仍然可以从软件包说明文件中找到摘录。
Go的exec.Command将第一个参数作为程序运行,其余参数作为参数运行。 '<'被解释为文字参数。
例如
要做您想做的事情,您有两种选择。
-
运行(ba)sh并将命令作为参数:
exec.Command("bash","-c","mysql ... < full/path") - 手动通过管道传输文件内容。有关详细信息,请参见https://stackoverflow.com/a/36383984/8751302。
bash版本的问题是不能在不同的操作系统之间移植。在Windows上将无法使用。