使用(見之前的部落格)
gorm事務處理
nil//延時關閉資料庫連線
defer db.
close
()gorm.open(「mysql」,「root:123456@tcp(127.0.0.1:3306)/mysql?charset=utf8」)詳解:
在高併發實踐中,為了提高資料庫連線的使用率,避免重複建立資料庫連線帶來的效能消耗,會經常使用資料庫連線池技術來維護資料庫連線。
gorm自帶了資料庫連線池使用非常簡單只要設定下資料庫連線池引數即可。
//定義乙個工具包,用來管理gorm資料庫連線池的初始化工作。
package tools
//定義全域性的db物件,我們執行資料庫操作主要通過他實現。
var _db *gorm.db
//包初始化函式,golang特性,每個包初始化的時候會自動執行init函式,這裡用來初始化gorm。
func
init()
//設定資料庫連線池引數
_db.db(
).setmaxopenconns
(100
)//設定資料庫連線池最大連線數
_db.db(
).setmaxidleconns(20
)//連線池最大允許的空閒連線數,如果沒有sql任務需要執行的連線數大於20,超過的連線會被連線池關閉。
}//獲取gorm db物件,其他包需要執行資料庫查詢的時候,只要通過tools.getdb()獲取db物件即可。
//不用擔心協程併發使用同樣的db物件會共用同乙個連線,db物件在呼叫他的方法的時候會從資料庫連線池中獲取新的連線
func
getdb()
*gorm.db
使用示例:
package main
//匯入tools包
import tools
func
main()
//自動生成sql: select * from `users` where (username = 'tizi365') limit 1
db.where
("username = ?"
,"tizi365").
first
(&u)
}
在開發中經常需要資料庫事務來保證多個資料庫寫操作的原子性。例如電商系統中的扣減庫存和儲存訂單。
gorm事務用法:
// 開啟事務
tx := db.
begin()
//在事務中執行資料庫操作,使用的是tx變數,不是db。
//庫存減一
//等價於: update `foods` set `stock` = stock - 1 where `foods`.`id` = '2' and stock > 0
//rowsaffected用於返回sql執行後影響的行數
rowsaffected := tx.
model
(&food)
.where
("stock > 0").
update
("stock"
, gorm.
expr
("stock - 1"))
.rowsaffected
if rowsaffected ==
0err := tx.
create
(儲存訂單)
.error
//儲存訂單失敗,則回滾事務
if err !=
nilelse
gorm快速使用
模型 為表中的字段,記得欄位名開頭大寫 type patient struct 此例為postgresql func main 不重新建立複數結尾的表,還是原來的表,可以利用原表中的結構,資料 db.singulartable true defer db.close 建立 patient db.cr...
gorm 強制使用索引 必看的資料庫使用規範
關於mysql資料庫規範,相信大家多少看過一些文件。本篇文章給大家詳細分類總結了資料庫相關規範,從庫表命名設計規範講起,到索引設計規範,後面又給出sql編寫方面的建議。相信這些規範適用於大多數公司,也希望大家都能按照規範來使用我們的資料庫,這樣我們的資料庫才能發揮出更高的效能。關於庫 強制 庫的名稱...
使用Sanic框架快速搭建測試介面
from sanic import sanic from sanic import response from sanic.response import text,json 給你的專案起個名 路由裝飾器,和flask很相似。async deftest request return text hel...