sqlite基本原理介绍与操作
sqlite 基本介绍
引题
为什么使⽤数据库:
之前的学习中,我们已经可以存储数据,变量,读写本地⽂件(txt,csv).
1. 持久化,内存中的变量当程序重启和电脑断电丢失数据,⽽硬盘可以长时间,持久地存储数据,数据存储到硬盘上的过程叫持久化,
2数据库更加专业强⼤。远⽐纯⽂本⽂档、excel表格强⼤,增删改查和统计函数。
数据库基本概念
观察表格、excel表格 ,打开了 学⽣列表.xls excel表格⽂档。类⽐引⼊数据库概念。
1. 库 schema:好像整个表格⽂档。 好像⼀个物流公司共占地100亩,盖了50个仓库,A01仓库负责存储河南客户货物,A02仓库负
责存储⼴州xx项⽬物料。每⼀个仓库对应⼀个项⽬。
2. 表 table:对应excel表格⾥sheet1 sheet2。由⾏内容和列组成。表描述⼀个类,每⼀⾏描述⼀个对象。
3. 字段 field:对应表格头部的 序号、班级、姓名。好像类的属性。字段⾥存储的值的类型需要事先定义。
4. 值 value:表格每⼀⾏具体存储的信息。
5. 主键 primary key:类似表格中 序号 这⼀列。数据库中这⼀列会⾃增并不会重复。
6. 外键 foreign key: 表1学员信息⾥⼀个班级字段引⽤⾃另⼀个表班级信息表的id列。优点易于维护,保持数据⼀致性。
7. 范式:描述 智游学校时,可以把全部信息字段定义到⼀张表上,也可以分为学员信息表、班级信息表、课程信息表。划分维度、信息
耦合度可⾼可低,具体结合业务逻辑分析。
常见数据库介绍
关系型数据库:
1. sqlite:轻量级数据库。功能基础简单,在数据较少情况下性能并不⽐重型数据库低。优点,python解释器内置驱动,⽆需安装直接
使⽤,适合初学数据库。⼿机应⽤使⽤的就是它。
2. mysql:最流⾏的数据库。中型。开源、php流⾏推动了mysql的流⾏。
3. PostgreSQL: ⼤象数据库,号称最先进的数据库。从⼤学兴起的开源数据库、架构优秀、功能前卫,数据量很⼤的时候,性能衰减不
明显。消耗相同硬件资源的情况下性能和稳定性优于mysql数据库。django odoo等python框架官⽅推荐使⽤此数据库。但是⽬前市场占有率还不⾼。
4. oracle:地位很⾼的商⽤数据库。昂贵、稳定、功能强⼤,常与java配合使⽤。
5. DB2 sybase MSSQL等,其它的商⽤数据库。
6. access:微软office套件中包含,轻量,由于数据库门槛,使⽤者不多。
no-sql(not only sql)型数据库:
7. mongodb 存储单位是⽂档,json(类似后端dict)结构整个存进去。数据常放在内存中以获得查询性能,定期把数据持久化到硬盘上。
8. redis 键值对 “name”=“⼩明” 。
数据库字段类型
数据库创建表⽰要事先告诉计算机硬盘,每张表的每个字段存什么类型、将要存储的内容⼤还是⼩。长度过⼩,内容值存不进去,长度太⼤,浪费硬盘空间。我们需要选择合适的类型和长度。
各数据库字段类型关键字基本⼀致。mysql oracle postgresql常⽤字段类型如下:
整数:常⽤INT INTEGER 占4个字节,2**32,可以表⽰常⽤范围整数。
(不常⽤)TINYINT(1字节) SMALLINT(2字节) MEDIUMINT(3字节)
BIGINT(8字节) 适⽤⾝份证号、VIP号码⽐较长的编号。
2. 浮点数
常⽤ FLOAT(4字节) 单精度⼩数 。 即使是单精度,范围也不⼩。
DOUBLE(8字节) 双精度⼩数。
场景 ⾦钱计算,轨道计算。
3. 字符串
CHAR char(10) 可以存储长度(字节长度)不超过10的字符串。例如"hello"。但由于长度按照字节判断,存unicode编码的中⽂只能存3个。
常⽤ VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5) 可以存储5个中⽂或5个英⽂字母。场景 ⽤户名、家庭住址。
TEXT TINYTEXT medium longtext , 场景 ⼤⽂本存储,书籍⽂章、⽤户反馈。
BLOB medium longblob ,⼆进制⽂件, 场景 图⽚、视频。但⼀般不在数据库中存储图⽚和视频,因为会增加数据库的计算压⼒和带宽传输压⼒和备份还原的难度和⽤户信息静态资源耦合到⼀起,解决⽅案是 图⽚视频存到普通⽂件⽬录下,数据库中存储⽂件路径。
4. ⽇期
DATE ⽇期, 形如"2018-11-08"
常⽤ DATETIME ⽇期时间, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30
GTM+8”
常⽤ TIMESTAMP 时间戳, 1541667270 1541667270.7252207 1541667270725
sqlite的字段⽐较简化:
INTEGER 整数
REAL 浮点数
TEXT 字符串
NULL 什么都不存
SQL
structured query language 结构化查询语⾔。专门对数据库进⾏查、增加、修改、删除、统计的操作语⾔。
CURD 增删查改 create update retrieve delete。
书写风格,关键字⼤⼩写都⾏,建议⼤写。表名⼤⼩写都⾏,但是在⼀些数据库中不区分⼤⼩写,建议⼩写。
(重要)基本语法。
SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, ⼩明, 男), (), ()]。
字段⽐较多时简写为 SELECT * FROM 表名; 由于数据库执⾏时会把*转换为字段再执⾏,性能极微⼩下降。
SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ; where限定条件查。
2 添加
INSERT 字段1,字段2,… INTO 表名 VALUES (1, “⼩明”, “男”);
简写 INSERT INTO 表名 VALUES (1, “⼩明”, “男”);
2. 修改
UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 过滤值;
注意没有where条件限定⾏的话将会更新整张表。
3. 删除
DELETE FROM 表名; 注意会删除整张表。
DELETE FROM 表名 WHERE 字段1 = 过滤值; 限定条件删除某些⾏。
4. 创建表
CREATE TABLE 表名 {
字段类型 字段名 其它关键字(主键 备注),
INT id PRIMARY KEY,
VARCHAR(20) username
测试
===
5. 通过sql或图形化⼯具创建⼀个雇员表employee ,字段 id 整数 主键 ⾃增、name姓名 字符串、sex性别 字符串、phone联系⽅式
字符串。
6. 插⼊⼀些测试数据。 (张三,男,1373333333)(⼩明,男,136000000)(⼩红,⼥,None)
7. 写py脚本,将employee表中数据全部查出。
8. 查出所有性别男数据
9. 更新⼩红电话为 138********
10. 张三离职,删除姓名=张三 电话=1373333333 的⼀⾏。
11. 假删除
12. 修改表,增加字段 address办公地点 字符串。更新代码,修改所有⼈办公地点都为“智游314教室”
13. 已知cursor.description() 可以获取到表字段的名字,
import sqlite3
mysql操作官方文档
connect = t("testsqlite.db")
cursor = connect.cursor()
UPDATE employee SET phone=138111111 where name = "⼩红"
""")
# ute("""
#    DELETE FROM employee  where name = "张三", phone=138111111222;
# """)
# 假性删除,为了防⽌数据误删和⽅便回。专门新建⼀个标识字段表⽰⽤户状态(正常、注销) cursor.update("""
UPDATE employee SET del_flag=1 WHERE name="⼩红";
""")
connectmit()
SELECT * FROM employee WHERE del_flag=0;
""")
connect.close()
···
(了解)datagrip操作⽅法(pycharm集成database⼯具为例⼦):
1. pycharm左下⾓图标调出⼯具栏,打开pycharm右侧Database⼯具。
2. 点加号-DataSource数据源-sqlite 。
3. 弹出的对话框选择 drivers-sqlite(Xerial)
4. 点击download sqlite-jdbc[latest]
5. 如果⽹速不好的话 下载sqlite-jdbc-3.20.1.jar 。对话框+号-custom jars 从本地安装
6. 驱动安装成功后点击apply应⽤
7. 点击对话框 project data source ,开始配置连接数据库的实例
8. File路径点击 …图标,选择要连接的.db⽂件。
9. 点test connection, seccessful为成功
10. 点击ok退出。看到连接的数据库实例下有表。
···

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。