58 Star 193 Fork 74

hidu/mysql-schema-sync

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
db.go 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
hidu 提交于 2015-11-07 16:37 +08:00 . FOREIGN KEY add
package internal
import (
"database/sql"
"fmt"
//load mysql
_ "github.com/go-sql-driver/mysql"
"log"
)
// MyDb db struct
type MyDb struct {
Db *sql.DB
dbType string
}
// NewMyDb parse dsn
func NewMyDb(dsn string, dbType string) *MyDb {
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(fmt.Sprintf("connect to db [%s] failed,", dsn, err))
}
return &MyDb{
Db: db,
dbType: dbType,
}
}
// GetTableNames table names
func (mydb *MyDb) GetTableNames() []string {
rs, err := mydb.Query("show table status")
if err != nil {
panic("show tables failed:" + err.Error())
}
defer rs.Close()
tables := []string{}
columns, _ := rs.Columns()
for rs.Next() {
var values = make([]interface{}, len(columns))
valuePtrs := make([]interface{}, len(columns))
for i := range columns {
valuePtrs[i] = &values[i]
}
if err := rs.Scan(valuePtrs...); err != nil {
panic("show tables failed when scan," + err.Error())
}
var valObj = make(map[string]interface{})
for i, col := range columns {
var v interface{}
val := values[i]
b, ok := val.([]byte)
if ok {
v = string(b)
} else {
v = val
}
valObj[col] = v
}
if valObj["Engine"] != nil {
tables = append(tables, valObj["Name"].(string))
}
}
return tables
}
// GetTableSchema table schema
func (mydb *MyDb) GetTableSchema(name string) (schema string) {
rs, err := mydb.Query(fmt.Sprintf("show create table `%s`", name))
if err != nil {
log.Println(err)
return
}
defer rs.Close()
for rs.Next() {
var vname string
if err := rs.Scan(&vname, &schema); err != nil {
panic(fmt.Sprintf("get table %s 's schema failed,%s", name, err))
}
}
return
}
// Query execute sql query
func (mydb *MyDb) Query(query string, args ...interface{}) (*sql.Rows, error) {
log.Println("[SQL]", "["+mydb.dbType+"]", query, args)
return mydb.Db.Query(query, args...)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/hidu/mysql-schema-sync.git
git@gitee.com:hidu/mysql-schema-sync.git
hidu
mysql-schema-sync
mysql-schema-sync
21680d8e8e24

搜索帮助