如何使用go sql驱动程序创建新的MySQL数据库
我正在研究自动克隆数据库的Golang脚本。 我正在使用GoSQL驱动程序,但在文档中找不到创建新数据库的方法。 连接到MySQL需要URL方案,如:如何使用go sql驱动程序创建新的MySQL数据库,mysql,go,Mysql,Go,我正在研究自动克隆数据库的Golang脚本。 我正在使用GoSQL驱动程序,但在文档中找不到创建新数据库的方法。 连接到MySQL需要URL方案,如: user:password@tcp(localhost:3306)/database_name 但是数据库还不存在,我只想连接到服务器,然后创建一个新的 我该怎么做?我必须使用另一个驱动程序?您完全可以使用go sql驱动程序。但是,您需要使用具有适当访问权限的mysql用户来创建新数据库 以下是一个例子: func create(name s
user:password@tcp(localhost:3306)/database_name
但是数据库还不存在,我只想连接到服务器,然后创建一个新的
我该怎么做?我必须使用另一个驱动程序?您完全可以使用go sql驱动程序。但是,您需要使用具有适当访问权限的mysql用户来创建新数据库 以下是一个例子:
func create(name string) {
db, err := sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/")
if err != nil {
panic(err)
}
defer db.Close()
_,err = db.Exec("CREATE DATABASE "+name)
if err != nil {
panic(err)
}
_,err = db.Exec("USE "+name)
if err != nil {
panic(err)
}
_,err = db.Exec("CREATE TABLE example ( id integer, data varchar(32) )")
if err != nil {
panic(err)
}
}
请注意,连接字符串中未提供数据库名称。我们只是在连接之后创建数据库(createdatabase命令),然后切换连接以使用它(use命令)
注意:在上,用户可以维护一个很好的数据库/sql教程和文档。如果您想创建一个不存在的新数据库,并直接在程序中使用它,请注意,
数据库/sql
维护一个连接池
因此,打开的数据库连接最好包含数据库名称。在手动使用db.Exec(“使用”+name)
后,当数据库/sql
打开一个新连接时,我看到了“错误1046:未选择任何数据库”
func createAndOpen(name string) *sql.DB {
db, err := sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/")
if err != nil {
panic(err)
}
defer db.Close()
_,err = db.Exec("CREATE DATABASE IF NOT EXISTS "+name)
if err != nil {
panic(err)
}
db.Close()
db, err = sql.Open("mysql", "admin:admin@tcp(127.0.0.1:3306)/" + name)
if err != nil {
panic(err)
}
defer db.Close()
return db
}
对于go ORM 2.0,我的db_config.go文件看起来像:
package infrastructure
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm2.0/utils"
)
//Setup Models: initializaing the mysql database
func GetDatabaseInstance() *gorm.DB {
get := utils.GetEnvWithKey
USER := get("DB_USER")
PASS := get("DB_PASS")
HOST := get("DB_HOST")
PORT := get("DB_PORT")
DBNAME := get("DB_NAME")
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", USER, PASS, HOST, PORT, DBNAME)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
_ = db.Exec("CREATE DATABASE IF NOT EXISTS " + DBNAME + ";")
if err != nil {
panic(err.Error())
}
return db
}
数据库/sql
维护一个连接池。我看到在建立新连接时弹出“错误1046:未选择数据库”。有没有办法在数据库/sql
打开新连接后自动运行db.Exec(“使用”+name)
。。。只需将数据库名称放入连接字符串:“用户:password@tcp(hostname:port)/dbname“啊,所以首先sql.Open(…)
不带数据库名,然后运行db.Exec(“如果不存在创建数据库”+name)
。然后关闭连接,sql。用数据库名打开(…/name)
以创建数据库并将其安全地用于池。诚实的提问:这不是一个关于如何打开自己进行sql注入的教科书式示例吗?无法使用占位符参数执行此操作吗?返回db
将关闭,因为您调用了延迟db.Close()
。不确定此操作是否有效,因为gorm首先无法建立任何连接。