導讀:能單獨拎出sql檔案的某一行或幾行執行,是不是非常有趣?今天我們來介紹一下這個有意思的庫--dotsql。
背景www.cppcns.com介紹
dotsql不是orm,也不是sql查詢語句的構建器,而是可以在乙個sql檔案中拎出某幾行來執行的工具,非常類似於ini配置檔案的讀取。如果還不理解,我們來看如下內容。
-- 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
上面是sql檔案中定義的語句,我們可以很清晰地看出,每條語句上方都以 -- name 的方式打上了「註解」,而作為開發人員,可以根據打了標記的名稱挑選語句執程式設計客棧行。
快速上手
準備工作
目錄結構概覽
├── data.sql
├── go.mod
├── go.sum
└── main.go
初始化專案
go mod init dotsql
建立data.sql檔案,鍵入如下sql,只是程式設計客棧示例,內容可以自定義。
-- name: create-users-table
drop table if exists users;
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
為了方便,我們用sqlite來演示,並儲存在記憶體當中,所以要先安裝sqlite驅動
**演示
現在來寫**,匯入go-sqlite3庫
獲取sqlite3的資料庫控制代碼
db, _ := sql.open("sqlite3", ":memory:")
載入data.sql檔案
dot, _ := dotsql.loadfromfile("data.sql")
挑選檔案中的乙個標籤來執行,exec方法的第乙個引數需要傳入控制代碼
dot.exec(db, "create-users-table")
從注釋可以找到對應的語句,是乙個建立表的操作
-- name: create-users-table
drop table if exists users;
create table users (
id integer primary key autoincrement not null,
name varchar(255),
email varchar(2hjqglityc55)
);再來執行第二條語句,插入表資料
dot.exec(db, "create-user", "user name", "[email protected]")
我們再來嘗試查詢表資料,這裡要注意,目前所有的操作都是基於定義的標籤來選擇執行的
rows, _ := d "find-users-by-email", "[email protected]")
var (
id int
name string
email string
) for rows.next()
query方法返回的是*sql.rows型別,同學們可以自行遍歷取值測試,大功告成!
其他玩法
我們可以先預準備sql語句,再在合適的時機執行
stmt, err := dot.prepare(db, "drop-users-table")
result, err := stmt.exec()
同樣,我們也可以將多個sql檔案合併再進行取值操作
dot1, err := dotsql.loadfromfile("queries1.sql")
dot2, err := dotsql.loadfromfile("queries2.sql")
dot := dotsql.merge(dot1, dot2)
總結
Go語言庫系列之dotsql
dotsql不是orm,也不是sql查詢語句的構建器,而是可以在乙個sql檔案中拎出某幾行來執行的工具,非常類似於ini配置檔案的讀取。如果還不理解,我們來看如下內容。name create users table create table users id integer primary key ...
Go語言庫系列之flag
終端 命令列 操作是程式設計師的必備技能,但是你知道怎麼通過golang製作出如下命令嗎?flag girl h usage of girl height int 身高 default 140 flag girl height 170 恭喜你獲得了身高 170 的女朋友整個實現非常簡單,只需要5個步...
Go語言系列之標準庫strconv
go語言中strconv包實現了基本資料型別和其字串表示的相互轉換。更多函式請檢視官方文件。這一組函式是我們平時程式設計中用的最多的。atoi atoi 函式用於將字串型別的整數轉換為int型別,函式簽名如下。func atoi s string i int,err error 如果傳入的字串引數無...