一日一技:这个数据库用起来刚刚好

简介: 一日一技:这个数据库用起来刚刚好

摄影:产品经理吃小龙虾的季节到了

阅读本文预计3分29秒

我的公众号是使用Bear这个Mac App来写的。它在官网上写到,所有笔记数据通过SQLite来储存,如下图所示。


SQLite是一个基于文件的关系型数据库,它只有一个文件,但是却最多能储存140TB的数据[1]

SQLite官网给出了一个判断是否适合使用 SQLite 的标准:

  • 如果程序和数据分离且它们通过互联网连接,那么不适合用 SQLite
  • 高并发写入,那么不适合用 SQLite
  • 如果数据量非常大,那么不适合 SQLite
  • 除此之外,选择 SQLite

Linux/macOS 系统都自带 SQLite 数据库,并且使用 Python 自带的模块就能轻易读写 SQLite。本文演示一下 SQLite 的增删改查和联表查询。

创建数据表

SQLite 里面,一个文件就是一个库。所以我们只需要创建数据表就可以了。方法非常简单:

import sqlite3
conn = sqlite3.connect('kingname.db')with conn:    conn.execute('''    CREATE TABLE user (    name TEXT,    age INTEGER,    address TEXT,    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT);    ''')

运行如下图所示:

通过这种方式,我们在当前文件夹下面创建了一个叫做kingname.db的数据库文件,并创建了一个叫做user的表。sqlite3库的数据库链接对象支持上下文管理器,所以只需要with conn:就可以执行 SQL 语句,不需要创建游标。退出缩进时,SQL 语句会自动提交生效。

写入数据

现在我们来写入几条数据:


sql = 'insert into user (id, name, age, address) values(?, ?, ?, ?)'datas = [    (1, 'kingname', 20, '浙江省杭州市'),    (2, '产品经理', 18, '上海市'),    (3, '胖头猪', 8, '吃屁岛')]with conn:    conn.executemany(sql, datas)

运行效果如下图所示:


macOS 上有一个软件叫做 DB Browser for SQLite,可以用来查看我们刚才创建的数据表是否成功:

查询数据

使用 SQL 语句也可以查看数据:


with conn:    datas = conn.execute("select * from user where name = 'kingname'")    for data in datas:        print(data)

运行效果如下图所示:

当然,通过修改row_factory也可以通过列名来读取 数据:


conn.row_factory = sqlite3.Rowwith conn:    datas = conn.execute("select * from user where name = 'kingname'")    for data in datas:        print(data['address'])

运行效果如下图所示:


删除数据

与其他操作一样,删除数据只需要写对应的 SQL 语句即可:



with conn:    conn.execute('delete from user where id = 3')

运行效果如下图所示:

联表查询

本质上还是 SQL 语句的改变,我们先创建另外一个表:


with conn:    conn.execute('''    CREATE TABLE info (    user_id INTEGER,    salary integer,    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT);    ''')    sql = 'insert into info (user_id, salary) values(?, ?)'    datas = [    (1, 99999999),    (2, 0),    ]    conn.executemany(sql, datas)

接下来进行一个联表查询:



with conn:    sql = 'select u.name as name, i.salary as salary from user u inner join info i on u.id=i.user_id'    datas = conn.execute(sql)    for data in datas:        print(f'{data["name"]}的工资是:{data["salary"]}')

运行效果如下图所示:

总结

对于低并发量,程序与数据放在一起的情况,可以使用 SQLite 来存放,它比单独写一个文本文件来存放数据更加可控,更加友好。而且使用 Python 操作 SQLite 只需要使用自带的模块sqlite3即可。当你要把数据交给其他人时,你只需要把生成的这个.db文件交给别人就好了。他们使用任何支持 SQLite 的工具都能打开。

目录
相关文章
|
6月前
|
SQL Java 数据库
从0到1了解数据库—实现一个自己的数据库
从0到1了解数据库—实现一个自己的数据库
67 0
ly~
|
1月前
|
存储 安全 搜索推荐
数据库的应用
数据库在众多领域中发挥着关键作用。在企业管理与运营方面,它支持客户关系管理和企业资源规划,帮助企业了解客户需求、优化资源配置;在金融领域,银行系统和证券交易依赖数据库保障安全性和准确性,进行风险评估;在医疗保健行业,电子病历管理和医疗资源管理通过数据库提高诊断准确性和资源利用率;在教育领域,学生信息管理和在线教育平台利用数据库优化教学管理,提供个性化学习体验;在电子商务中,商品管理和订单管理则确保了信息的准确性和高效处理。
ly~
38 1
|
2月前
|
关系型数据库 MySQL 数据库
|
6月前
|
SQL 数据库
数据库(五)
`UPDATE` SQL语句用于修改表中的数据。基本语法是:`UPDATE 表名 SET 属性名1=新值1,属性名2=新值2 WHERE 条件表达式`。例如,更新员工工资:`UPDATE emp SET salary=5000 WHERE id=1`。可以使用`+=`操作符增加值,如`UPDATE emp SET salary=salary+500 WHERE dept_id=2`。统计查询中,`COUNT`, `MAX`, `MIN`, `AVG`, `SUM`等函数用于数值、字符和日期的统计分析,注意`WHERE`子句不能直接使用聚集函数。
31 2
|
6月前
|
数据库
数据库视频(四)
数据库视频(四)
42 0
|
6月前
|
关系型数据库 MySQL 数据库
数据库(三)
数据完整性是数据库管理中的关键概念,确保数据的准确和一致。主要包括: 1. 实体完整性:通过主键(唯一且非空)来标识表中的每条记录,如创建`test2`表时设置`n1`为主键。 2. 创建表`test3`时,`n1`和`n2`组合成为主键,确保多字段的唯一性。 3. 唯一约束:用于保证列值的唯一性,如在`test1`中添加对`n2`的唯一约束,或创建`test4`时`n1`和`n2`的组合值唯一。 4. 引用完整性:通过外键约束实现,如`emp`表的`dept_id`引用`dept`表的`id`,确保数据间的关联合法性。外键可以有级联操作,如`on delete cascade`和`o
27 0
|
6月前
|
存储 数据库 数据安全/隐私保护
数据库特点
数据库特点
70 9
|
存储 SQL NoSQL
数据库—耿建玲视频总结(一)
基本上每一个材料开始都有其介绍发展史的,了解一下发展史可以培养我们一部分的兴趣,然后就是SQL server的安装介绍,这个在之前我们已经亲身实践了安装的过程,并且还为这安装问题苦恼过好久呢
|
SQL 资源调度 关系型数据库
快速学完数据库
本来想写文章来复习的,后面发现越写越多,而且感觉本末倒置了,查询语句写的最少,其他倒是写的很详细,数据库知识真的太细太碎了,整理起来难度真的挺大的,如果是数据库小白,这篇文章肯定很有用,它没有过多的实战,带你了解数据库的基本框架和能够完成的任务,如果是数据库学过的话,那这篇文章可能对你而言只有前面数据库概述和设计数据库有用,数据库sql语句这部分非常的精简,几乎只是了解个框架,第一次写长文欢迎评论区大佬们的指正。
84 0
快速学完数据库