Skip to content

Latest commit

 

History

History
96 lines (74 loc) · 3.02 KB

README.md

File metadata and controls

96 lines (74 loc) · 3.02 KB

qb - the database toolkit for go

Join the chat at https://gitter.im/aacanakin/qb Build Status Coverage Status License (LGPL version 2.1) Go Report Card GoDoc

This project is currently pre 1. More documentation will be coming soon. Although the tests coverage are high, currently, it is not recommended to use it in production. It can currently crash especially in concurrency.

About qb

qb is a database toolkit for easier db usage in go. It is inspired from python's most favorite orm sqlalchemy. qb is an orm as well as a query builder. It is quite modular in case of using just expression api and query building stuff.

Features

  • Support for postgres, mysql & sqlite
  • Simplistic query builder with no real magic
  • Struct to table ddl mapper where initial table migrations can happen
  • Expression builder which can be built almost any sql statements
  • Transactional session api that auto map structs to queries
  • Foreign Key definitions of structs using tags
  • Single & composite column indices
  • Relationships (soon..)

Installation

Installation with glide;

glide get github.com/aacanakin/qb

Installation using go get;

go get -u github.com/aacanakin/qb

If you want to install test dependencies then;

go get -u -t github.com/aacanakin/qb

Quick Start

package main

import (
	"fmt"
	"github.com/aacanakin/qb"
	"github.com/nu7hatch/gouuid"
)

type User struct {
	ID       string `qb:"type:uuid; constraints:primary_key"`
	Email    string `qb:"constraints:unique, notnull"`
	FullName string `qb:"constraints:notnull"`
	Bio      string `qb:"type:text; constraints:null"`
}

func main() {

	db, err := qb.New("postgres", "user=postgres dbname=qb_test sslmode=disable")
	if err != nil {
		panic(err)
	}

	defer db.Close()

	// add table to metadata
	db.Metadata().Add(User{})

	// create all tables registered to metadata
	db.Metadata().CreateAll()

	userID, _ := uuid.NewV4()
	db.Add(&User{
		ID:       userID.String(),
		Email:    "robert@de-niro.com",
		FullName: "Robert De Niro",
	})

	err = db.Commit() // insert user
	fmt.Println(err)

	var user User
	db.Find(&User{ID: userID.String()}).First(&user)

	fmt.Println("id", user.ID)
	fmt.Println("email", user.Email)
	fmt.Println("full_name", user.FullName)

	db.Metadata().DropAll() // drops all tables

}