go 使用 sqlite3
start at 2023/01/28.

安装 sqlite3

在 arch 源里,mysql 被替换成了 mariadb,没力气折腾了,也不想污染 manjaro 的环境,所以在 windows 上装了 mysql 来远程连接,但是远程连接的速度慢的感人,因为要做管理信息系统的实践课作业,我既不想拿两台电脑去,也不想在 manjaro 上装一个偏大的数据库来耗电,最后我觉得应该试一下是最轻量的 sqlite3

one line

$ sudo pacman -S sqlite3

使用 sqlite3

和其他关系型数据库不同的是,SQLite没有单独的服务器进程,以供客户端程序访问并提供相关的服务。SQLite作为一种嵌入式数据库,其运行环境与主程序位于同一进程空间,因此它们之间的通信完全是进程内通信,而相比于进程间通信,其效率更高。然而需要特别指出的是,该种结构在实际运行时确实存在保护性较差的问题,比如此时,应用程序出现问题导致进程崩溃,由于SQLite与其所依赖的进程位于同一进程空间,那么此时SQLite也将随之退出。但是对于独立的服务器进程,则不会有此问题,它们将在密闭性更好的环境下完成它们的工作。

安装完之后,在命令行直接输入 sqlite3 就能进入 sqlite 的界面了,sqlite3 的命令都是用 . 开头,详见 .help ,下文并不会对命令做详细介绍,我认为没必要去记住,用的时候查一下表就行了,只要掌握几个常用的指令就行

创建数据库

在进入 sqlite 界面前可以指定一个数据库文件,如果这个文件不存在的话,进入界面之后输入 .database 会保存到本地,之后使用 .quit 退出 sqlite 界面查看

$ sqlite3 test1.db
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite> .database
main: /home/paradox/workspace/go/src/trysqlite3/test1.db r/w
sqlite> .quit
$ ls
test1.db

也可以在进入 sqlite 后,用 .open 进行等价的操作,但这时候不需要 .database 就能保存到本地

$ sqlite3
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test.db
sqlite> .quit
$ ls
test.db

gorm 连接

🔗 gorm 的官方文档有演示,由于 sqlite 是基于文件的,所以就不需要一堆复杂的连接参数

package main
import (
    "gorm.io/gorm"
    "gorm.io/driver/sqlite"
)

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
}

测试建表

这里使用 gorm 的 AutoMigrate 方法

type File struct {
    Id int
    Filename string
    CreateDate time.Time
}

func main() {
    db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Cofing{})
    db.AutoMigrate(&File{})
}

.table 查看数据库中的所有表,.schema 查看指定表的字段

$ sqlite3 test.db
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite> .tables
files
sqlite> .schema files
CREATE TABLE `files` (`id` integer,`filename` text,`create_date` datetime,PRIMARY KEY (`id`));

没问题,那 gorm 的其他方法应该都能用了

最后来测试一下增就结束吧

db.Create(&File{Filename: "nice", CreateData: time.Now()})

数据库当然支持 sql 语句,我们来查看表

sqlite> select * from files;
1|nice|2023-01-28 21:14:31.440692473+08:00|

其中 id 是自增主键,所以能自加,可以看到非常完美,我相信 sqlite 一定非常好用

之后可能会遇到坑,做好心理准备

貌似后台要开一个 sqlite3 test.db 才能响应,不然 orm 会阻塞

说实话,懒人的 orm 让我有点不舒服,下学期还是要系统性学习一下 sql 语句啊,一方面为了灵活,另一方面面试肯定还要用啊 …

2023/01/28
> CLICK TO back <