一个用于使用 SQL 的 Golang 库。
$ go get github.com/qustavo/dotsql首先,您需要在 sql 文件中定义查询:
-- name: create-users-table
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name VARCHAR(255),
email VARCHAR(255)
);
-- name: create-user
INSERT INTO users (name, email) VALUES(?, ?)
-- name: find-users-by-email
SELECT id,name,email FROM users WHERE email = ?
-- name: find-one-user-by-email
SELECT id,name,email FROM users WHERE email = ? LIMIT 1
--name: drop-users-table
DROP TABLE users请注意,每个查询都有一个名称标签(--name:),
这需要能够唯一识别每个查询
dotsql 文件中。
在准备好 sql 文件后,您可以加载它并开始使用查询:
// Get a database handle
db, err := sql.Open("sqlite3", ":memory:")
// Loads queries from file
dot, err := dotsql.LoadFromFile("queries.sql")
// Run queries
res, err := dot.Exec(db, "create-users-table")
res, err := dot.Exec(db, "create-user", "User Name", "[email protected]")
rows, err := dot.Query(db, "find-users-by-email", "[email protected]")
row, err := dot.QueryRow(db, "find-one-user-by-email", "[email protected]")
stmt, err := dot.Prepare(db, "drop-users-table")
result, err := stmt.Exec()您还可以合并来自不同 SQL 文件输入的多个 dotsql 实例:
dot1, err := dotsql.LoadFromFile("queries1.sql")
dot2, err := dotsql.LoadFromFile("queries2.sql")
dot := dotsql.Merge(dot1, dot2)text/template 样式的文本插值受支持。
暂无开放 Issues,或尚未同步最近议题。