goweb 訪問資料庫

2022-05-15 05:24:11 字數 4296 閱讀 8920

對許多web應用程式而言,資料庫都是其核心所在。資料庫幾乎可以用來儲存你想查詢和修改的任何資訊,比如使用者資訊、產品目錄或者新聞列表等。

go沒有內建的驅動支援任何的資料庫,但是go定義了database/sql介面,使用者可以基於驅動介面開發相應資料庫的驅動,

目前nosql已經成為web開發的乙個潮流,很多應用採用了nosql作為資料庫,而不是以前的快取

go database/sql tutorial 裡提供了慣用的範例及詳細的說明。
go與php不同的地方是go官方沒有提供資料庫驅動,而是為開發資料庫驅動定義了一些標準介面,開發者可以根據定義的介面來開發相應的資料庫驅動,這樣做有乙個好處,只要是按照標準介面開發的**, 以後需要遷移資料庫時,不需要任何修改。

在我們使用database/sql介面和第三方庫的時候經常看到如下:

)新手都會被這個_所迷惑,其實這個就是go設計的巧妙之處,我們在變數賦值的時候經常看到這個符號,它是用來忽略變數賦值的佔位符,那麼包引入用到這個符號也是相似的作用,這兒使用_的意思是引入後面的包名而不直接使用這個包中定義的函式,變數等資源。

包在引入的時候會自動呼叫包的init函式以完成對包的初始化。因此,我們引入上面的資料庫驅動包之後會自動去呼叫init函式,然後在init函式裡面註冊這個資料庫驅動,這樣我們就可以在接下來的**中直接使用這個資料庫驅動了。

這竟然在講如何開發乙個驅動,我的天,原諒我尚才疏學淺,這裡還講了高階用法,可惜我看不懂o(╥﹏╥)o

目前internet上流行的**構架方式是lamp,其中的m即mysql, 作為資料庫,mysql以免費、開源、使用方便為優勢成為了很多web開發的後端資料庫儲存引擎

sql.open()函式用來開啟乙個註冊過的資料庫驅動,go-sql-driver中註冊了mysql這個資料庫驅動,第二個引數是dsn(data source name),它是go-sql-driver定義的一些資料庫鏈結和配置資訊。它支援如下格式:

user@unix(/path/to/socket)/dbname?charset=utf8

user:password@tcp(localhost:5555)/dbname?charset=utf8

user:password@/dbname

user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

db.prepare()函式用來返回準備要執行的sql操作,然後返回準備完畢的執行狀態。

db.query()函式用來直接執行sql返回rows結果。

stmt.exec()函式用來執行stmt準備好的sql語句

傳入的引數都是=?對應的資料,這樣做的方式可以一定程度上防止sql注入。

create table `userinfo` (

`uid` int(10) not null auto_increment,

`username` varchar(64) null default null,

`department` varchar(64) null default null,

`created` date null default null,

primary key (`uid`)

);create table `userdetail` (

`uid` int(10) not null default '0',

`intro` text null,

`profile` text null,

primary key (`uid`)

)

如下示例將示範如何使用database/sql介面對資料庫表進行增刪改查操作

//刪除資料

stmt, err = db.prepare("delete from userinfo where uid=?")

checkerr(err)

res, err = stmt.exec(id)

checkerr(err)

affect, err = res.rowsaffected()

checkerr(err)

fmt.println(affect)

db.close()

}func checkerr(err error)

}sqlite 是乙個開源的嵌入式關聯式資料庫,實現自包容、零配置、支援事務的sql資料庫引擎。其特點是高度便攜、使用方便、結構緊湊、高效、可靠。 與其他資料庫管理系統不同,sqlite 的安裝和執行非常簡單,在大多數情況下,只要確保sqlite的二進位制檔案存在即可開始建立、連線和使用資料庫。如果您正在尋找乙個嵌入式資料庫專案或解決方案,sqlite是絕對值得考慮。sqlite可以說是開源的access。

postgresql 是乙個自由的物件-關聯式資料庫伺服器(資料庫管理系統),它在靈活的 bsd-風格許可證下發行。它提供了相對其他開放源**資料庫系統(比如 mysql 和 firebird),和對專有系統比如 oracle、sybase、ibm 的 db2 和 microsoft sql server的一種選擇。

postgresql和mysql比較,它更加龐大一點,因為它是用來替代oracle而設計的。所以在企業應用中採用postgresql是乙個明智的選擇。

mysql被oracle收購之後正在逐步的封閉(自mysql 5.5.31以後的所有版本將不再遵循gpl協議),鑑於此,將來我們也許會選擇postgresql而不是mysql作為專案的後端資料庫。

beego orm是這本書的作者開發的乙個go進行orm操作的庫,它採用了go style方式對資料庫進行操作,實現了struct到資料表記錄的對映。beego orm是乙個十分輕量級的go orm框架,開發這個庫的本意降低複雜的orm學習曲線,盡可能在orm的執行效率和功能之間尋求乙個平衡,beego orm是目前開源的go orm框架中實現比較完整的乙個庫,而且執行效率相當不錯,功能也基本能滿足需求。

beego orm是支援database/sql標準介面的orm庫,所以理論上來說,只要資料庫驅動支援database/sql介面就可以無縫的接入beego orm。

nosql(not only sql),指的是非關係型的資料庫。隨著web2.0的興起,傳統的關聯式資料庫在應付web2.0**,特別是超大規模和高併發的sns型別的web2.0純動態**已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。

而go語言作為21世紀的c語言,對nosql的支援也是很好,目前流行的nosql主要有redis、mongodb、cassandra和membase等。這些資料庫都有高效能、高併發讀寫等特點,目前已經廣泛應用於各種應用中。這本書這一塊接下來主要講了一下redis和mongodb的操作。

redis是乙個key-value儲存系統。和memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(鍊錶)、set(集合)和zset(有序集合)。

mongodb是乙個高效能,開源,無模式的文件型資料庫,是乙個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,採用的是類似json的bjson格式來儲存資料,因此可以儲存比較複雜的資料型別。mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於物件導向的查詢語言,幾乎可以實現類似關聯式資料庫單錶查詢的絕大部分功能,而且還支援對資料建立索引。

目前go支援mongodb最好的驅動就是mgo,這個驅動目前最有可能成為官方的pkg。

我們可以看出來mgo的操作方式和beedb的操作方式幾乎類似,都是基於struct的操作方式,這個就是go style。

這一章主要講解了go如何設計database/sql介面,然後介紹了各種第三方關係型資料庫驅動的使用。接著介紹了beedb,一種基於關係型資料庫的orm庫,如何對資料庫進行簡單的操作。最後介紹了nosql的一些知識,目前go對於nosql支援還是不錯,因為go作為21世紀的c語言,那麼對於21世紀的資料庫也是支援的相當好。

通過這一章的學習,我們學會了如何操作各種資料庫,那麼就解決了我們資料儲存的問題,這是web裡面最重要的一部分,所以希望大家能夠深入的去了解database/sql的設計思想。

所以我要深入了解~~~~~~······

訪問資料庫 訪問資料庫

程式執行的時候,資料都是在記憶體中的。當程式終止的時候,通常都需要將資料儲存到磁碟上,無論是儲存到本地磁碟,還是通過網路儲存到伺服器上,最終都會將資料寫入磁碟檔案。而如何定義資料的儲存格式就是乙個大問題。如果我們自己來定義儲存格式,比如儲存乙個班級所有學生的成績單 名字成績 michael99 bo...

訪問資料庫 資料庫並行訪問

作者姓名 neo chen 陳景峰 暱稱 netkiller 呼號 bg7nyt 手機 86 13113668890 多維度架構 知乎 www.zhihu.com 這裡主要講述有關開發中遇到的資料庫並行問題 防止並行顯示背景 我們有乙個order訂單表,工作流如下 建立訂單 訂單分配 訂單審核 批准...

資料庫訪問

1.sqlcommand 建立sqlconnection的例項 using sqlconnection conn new sqlconnection connectionstring 建立sqlcommand的例項 string sql sql語句 sqlcommand cmd new sqlcom...