为了账号安全,请及时绑定邮箱和手机立即绑定

是否存在支持单个字符串中的多个语句的 Go Mysql 驱动程序?

是否存在支持单个字符串中的多个语句的 Go Mysql 驱动程序?

Go
MM们 2021-09-13 16:55:28
我正在尝试找到一个可以与Go 一起使用的 MySql 驱动程序,它支持在一次调用中发出多个 SQL 语句。例如,我可能希望使用以下 SQL 创建一个数据库:DROP SCHEMA IF EXISTS foo;CREATE SCHEMA IF NOT EXISTS foo;在诸如 PHP 之类的语言中,您可以将两个 SQL 语句放在一个字符串中并一次性执行,如下所示:$db = new PDO(...);$db->query("DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;");我需要这个的原因是因为我有 SQL 转储(来自mysqldump)我想以编程方式应用于各种数据库。我正在寻找 Go 中相同的功能,但似乎所有不同的驱动程序都不支持它,坦率地说,这让我感到震惊。Go-MySQL-Driverhttps://github.com/go-sql-driver/mysql这似乎是 Go 最常用的驱动程序。package mainimport "database/sql"import "log"import _ "github.com/go-sql-driver/mysql"func main() {    db, err := sql.Open("mysql", "user:password@(127.0.0.1:3306)/")    if err != nil {        log.Println(err)    }    sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;"    _, err = db.Exec(sql)    if err != nil {        log.Println(err)    }    db.Close()}输出:2015/02/16 18:58:08 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE SCHEMA IF NOT EXISTS foo' at line 1MyMySQLhttps://github.com/ziutek/mymysql这是另一个流行的驱动程序。package mainimport "database/sql"import "log"import _ "github.com/ziutek/mymysql/godrv"func main() {    db, err := sql.Open("mymysql", "database/user/password")    if err != nil {        log.Println(err)    }    sql := "DROP SCHEMA IF EXISTS foo; CREATE SCHEMA IF NOT EXISTS foo;"    _, err = db.Exec(sql)    if err != nil {        log.Println(err)    }    sql = "USE DATABASE foo;"    _, err = db.Exec(sql) // <-- error    if err != nil {        log.Println(err)    }    db.Close()}输出:2015/02/16 18:58:08 packet sequence error有谁知道任何与 Go 兼容的 MySql 驱动程序可以处理这样一个字符串中的多个语句?
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

添加一个来自@ithkuil 的关于 go-sql-driver 包的 multiStatements 的答案示例以供参考。(我没有足够的代表作为评论添加)。

multiStatements 的参数被添加到 sql.Open 调用的 dataSourceName 字符串中。例如

db, err := sql.Open("mysql", "user:pass@tcp(localhost:3306)/dbname?multiStatements=true")

建议您不要使用这样的 db 处理程序来处理用户输入,但它非常适合处理已知的 sql 文件。


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信