sqlx使用指南
这边文章主要基于Illustrated guide to SQLX翻译而成。
sqlx是一个go语言包,在内置database/sql包之上增加了很多扩展,简化数据库操作代码的书写。
资源
由于database/sql接口是sqlx的子集,当前文档中所有关于database/sql的用法同样用于sqlx
开始
安装sqlx 驱动
$ go get github.com/jmoiron/sqlx
本文访问sqlite数据库
$ go get github.com/mattn/go-sqlite3
Handle Types
sqlx设计和database/sql使用方法是一样的。包含有4中主要的handle types:
- sqlx.DB - 和sql.DB相似,表示数据库。
- sqlx.Tx - 和sql.Tx相似,表示transacion。
- sqlx.Stmt - 和sql.Stmt相似,表示prepared statement。
- sqlx.NamedStmt - 表示prepared statement(支持named parameters)
所有的handler types都提供了对database/sql的兼容,意味着当你调用sqlx.DB.Query时,可以直接替换为sql.DB.Query.这就使得sqlx可以很容易的加入到已有的数据库项目中。
此外,sqlx还有两个cursor类型:
- sqlx.Rows - 和sql.Rows类似,Queryx返回。
- sqlx.Row - 和sql.Row类似,QueryRowx返回。
连级到数据库
一个DB实例并不是一个链接,但是抽象表示了一个数据库。这就是为什么创建一个DB时并不会返回错误和panic。它内部维护了一个连接池,当需要进行连接的时候尝试连接。你可以通过Open创建一个sqlx.DB或通过NewDb从已存在的sql.DB中创建一个新的sqlx.DB
var db *sqlx.DB
// exactly the same as the built-in
db = sqlx.Open("sqlite3", ":memory:")
// from a pre-existing sql.DB; note the required driverName
db = sqlx.NewDb(sql.Open("sqlite3", ":memory:"), "sqlite3")
// force a connection and test that it worked
err = db.Ping()
在一些环境下,你可能需要同时打开一个DB并链接。可以调用connect,这个函数打开一个新的DB并尝试Ping。MustConnect函数在链接出错时会panic。
var err error
// open and connect at the same time:
db, err = sqlx.Connect("sqlite3", ":memory:")
// open and connect at the same time, panicing on error
db = sqlx.MustConnect("sqlite3", ":memory:")
Querying 101
sqlx中的handle types实现了数据库查询相同的基本的操作语法。
- Exec(…) (sql.Result, error) - 和 database/sql相比没有改变
- Query(…) (*sql.Rows, error) - 和 database/sql相比没有改变
- QueryRow(…) *sql.Row - 和 da