The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/vendor/github.com/go-xorm/xorm
Peter Dave Hello bf4c3f3ae6 optimize png images using zopflipng (#6197) 9 years ago
..
docs optimize png images using zopflipng (#6197) 9 years ago
examples tech(build): move dependencies to vendor folder 9 years ago
.gitignore tech(build): move dependencies to vendor folder 9 years ago
.gitmodules tech(build): move dependencies to vendor folder 9 years ago
.gopmfile tech(build): move dependencies to vendor folder 9 years ago
CONTRIBUTING.md tech(build): move dependencies to vendor folder 9 years ago
LICENSE tech(build): move dependencies to vendor folder 9 years ago
README.md tech(build): move dependencies to vendor folder 9 years ago
README_CN.md tech(build): move dependencies to vendor folder 9 years ago
VERSION tech(build): move dependencies to vendor folder 9 years ago
doc.go tech(build): move dependencies to vendor folder 9 years ago
engine.go tech(build): move dependencies to vendor folder 9 years ago
error.go tech(build): move dependencies to vendor folder 9 years ago
gen_reserved.sh tech(build): move dependencies to vendor folder 9 years ago
goracle_driver.go tech(build): move dependencies to vendor folder 9 years ago
helpers.go tech(build): move dependencies to vendor folder 9 years ago
helpers_test.go tech(build): move dependencies to vendor folder 9 years ago
logger.go tech(build): move dependencies to vendor folder 9 years ago
lru_cacher.go tech(build): move dependencies to vendor folder 9 years ago
memory_store.go tech(build): move dependencies to vendor folder 9 years ago
mssql_dialect.go tech(build): move dependencies to vendor folder 9 years ago
mymysql_driver.go tech(build): move dependencies to vendor folder 9 years ago
mysql_dialect.go tech(build): move dependencies to vendor folder 9 years ago
mysql_driver.go tech(build): move dependencies to vendor folder 9 years ago
oci8_driver.go tech(build): move dependencies to vendor folder 9 years ago
odbc_driver.go tech(build): move dependencies to vendor folder 9 years ago
oracle_dialect.go tech(build): move dependencies to vendor folder 9 years ago
pg_reserved.txt tech(build): move dependencies to vendor folder 9 years ago
postgres_dialect.go tech(build): move dependencies to vendor folder 9 years ago
pq_driver.go tech(build): move dependencies to vendor folder 9 years ago
processors.go tech(build): move dependencies to vendor folder 9 years ago
rows.go tech(build): move dependencies to vendor folder 9 years ago
session.go tech(build): move dependencies to vendor folder 9 years ago
sqlite3_dialect.go tech(build): move dependencies to vendor folder 9 years ago
sqlite3_driver.go tech(build): move dependencies to vendor folder 9 years ago
statement.go tech(build): move dependencies to vendor folder 9 years ago
syslogger.go tech(build): move dependencies to vendor folder 9 years ago
xorm.go tech(build): move dependencies to vendor folder 9 years ago

README.md

中文

Xorm is a simple and powerful ORM for Go.

Gitter

Build Status Go Walker Bitdeli Badge

Features

  • Struct <-> Table Mapping Support

  • Chainable APIs

  • Transaction Support

  • Both ORM and raw SQL operation Support

  • Sync database schema Support

  • Query Cache speed up

  • Database Reverse support, See Xorm Tool README

  • Simple cascade loading support

  • Optimistic Locking support

Drivers Support

Drivers for Go's sql package which currently support database/sql includes:

Changelog

  • v0.4.4

    • ql database expriment support
    • tidb database expriment support
    • sql.NullString and etc. field support
    • select ForUpdate support
    • many bugs fixed
  • v0.4.3

    • Json column type support
    • oracle expirement support
    • bug fixed
  • v0.4.2

    • Transaction will auto rollback if not Rollback or Commit be called.
    • Gonic Mapper support
    • bug fixed

More changelogs ...

Installation

If you have gopm installed,

gopm get github.com/go-xorm/xorm

Or

go get github.com/go-xorm/xorm

Documents

Quick Start

  • Create Engine
engine, err := xorm.NewEngine(driverName, dataSourceName)
  • Define a struct and Sync2 table struct to database
type User struct {
    Id int64
    Name string
    Salt string
    Age int
    Passwd string `xorm:"varchar(200)"`
    Created time.Time `xorm:"created"`
    Updated time.Time `xorm:"updated"`
}

err := engine.Sync2(new(User))
  • Query a SQL string, the returned results is []map[string][]byte
results, err := engine.Query("select * from user")
  • Execute a SQL string, the returned results
affected, err := engine.Exec("update user set age = ? where name = ?", age, name)
  • Insert one or multipe records to database
affected, err := engine.Insert(&user)
// INSERT INTO struct () values ()
affected, err := engine.Insert(&user1, &user2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values ()
affected, err := engine.Insert(&users)
// INSERT INTO struct () values (),(),()
affected, err := engine.Insert(&user1, &users)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values (),(),()
  • Query one record from database
has, err := engine.Get(&user)
// SELECT * FROM user LIMIT 1
has, err := engine.Where("name = ?", name).Desc("id").Get(&user)
// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1
  • Query multiple records from database, also you can use join and extends
var users []User
err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users)
// SELECT * FROM user WHERE name = ? AND age > 10 limit 0 offset 10

type Detail struct {
    Id int64
    UserId int64 `xorm:"index"`
}

type UserDetail struct {
    User `xorm:"extends"`
    Detail `xorm:"extends"`
}

var users []UserDetail
err := engine.Table("user").Select("user.*, detail.*")
    Join("INNER", "detail", "detail.user_id = user.id").
    Where("user.name = ?", name).Limit(10, 0).
    Find(&users)
// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 0 offset 10
  • Query multiple records and record by record handle, there two methods Iterate and Rows
err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error {
    user := bean.(*User)
    return nil
})
// SELECT * FROM user

rows, err := engine.Rows(&User{Name:name})
// SELECT * FROM user
defer rows.Close()
bean := new(Struct)
for rows.Next() {
    err = rows.Scan(bean)
}
  • Update one or more records, default will update non-empty and non-zero fields except to use Cols, AllCols and etc.
affected, err := engine.Id(1).Update(&user)
// UPDATE user SET ... Where id = ?

affected, err := engine.Update(&user, &User{Name:name})
// UPDATE user SET ... Where name = ?

var ids = []int64{1, 2, 3}
affected, err := engine.In(ids).Update(&user)
// UPDATE user SET ... Where id IN (?, ?, ?)

// force update indicated columns by Cols
affected, err := engine.Id(1).Cols("age").Update(&User{Name:name, Age: 12})
// UPDATE user SET age = ?, updated=? Where id = ?

// force NOT update indicated columns by Omit
affected, err := engine.Id(1).Omit("name").Update(&User{Name:name, Age: 12})
// UPDATE user SET age = ?, updated=? Where id = ?

affected, err := engine.Id(1).AllCols().Update(&user)
// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ?
  • Delete one or more records, Delete MUST has conditon
affected, err := engine.Where(...).Delete(&user)
// DELETE FROM user Where ...
  • Count records
counts, err := engine.Count(&user)
// SELECT count(*) AS total FROM user

Cases

Discuss

Please visit Xorm on Google Groups

Contributing

If you want to pull request, please see CONTRIBUTING

LICENSE

BSD License http://creativecommons.org/licenses/BSD/