The database toolkit for go
This project is currently pre 1.
Currently, it's not feature complete. It can have potential bugs. There are no tests covering concurrency race conditions. It can crash especially in concurrency. Before 1.x releases, each major release could break backwards compatibility.
qb is a database toolkit for easier db queries in go. It is inspired from python's best orm, namely sqlalchemy. qb is an orm(sqlx) as well as a query builder. It is quite modular in case of using just expression api and query building stuff.
The documentation is hosted in readme.io which has great support for markdown docs. Currently, the docs are about 80% - 90% complete. The doc files will be added to this repo soon. Moreover, you can check the godoc from here. Contributions & Feedbacks in docs are welcome.
go get -u github.com/slicebit/qb
If you want to install test dependencies then;
go get -u -t github.com/slicebit/qb
package main
import (
"fmt"
"github.com/slicebit/qb"
_ "github.com/mattn/go-sqlite3"
_ "github.com/slicebit/qb/dialects/sqlite"
)
type User struct {
ID string `db:"id"`
Email string `db:"email"`
FullName string `db:"full_name"`
Oscars int `db:"oscars"`
}
func main() {
users := qb.Table(
"users",
qb.Column("id", qb.Varchar().Size(40)),
qb.Column("email", qb.Varchar()).NotNull().Unique(),
qb.Column("full_name", qb.Varchar()).NotNull(),
qb.Column("oscars", qb.Int()).NotNull().Default(0),
qb.PrimaryKey("id"),
)
db, err := qb.New("sqlite3", "./qb_test.db")
if err != nil {
panic(err)
}
defer db.Close()
metadata := qb.MetaData()
// add table to metadata
metadata.AddTable(users)
// create all tables registered to metadata
metadata.CreateAll(db)
defer metadata.DropAll(db) // drops all tables
ins := qb.Insert(users).Values(map[string]interface{}{
"id": "b6f8bfe3-a830-441a-a097-1777e6bfae95",
"email": "[email protected]",
"full_name": "Jack Nicholson",
})
_, err = db.Exec(ins)
if err != nil {
panic(err)
}
// find user
var user User
sel := qb.Select(users.C("id"), users.C("email"), users.C("full_name")).
From(users).
Where(users.C("id").Eq("b6f8bfe3-a830-441a-a097-1777e6bfae95"))
err = db.Get(sel, &user)
fmt.Printf("%+v\n", user)
}