常用数据库介绍
关系型数据库
轻量级
- Microsoft office access 数据库:非常轻量。很少有人使用。
- sqlite:轻量级。【纯文本文件的数据库,无需安装,python内置驱动操作】。场景:手机应用。、
中量级,重量级
- mysql:开源免费,非常流行,13年左右随着PHP流行和免费的特点在互联网领域,国内流行,直到现在。已经被甲骨文公司收购。
- oracle:甲骨文公司产品,主打企业应用,跟java配合,企业应用。企业中流行,正版授权昂贵。
- db2:IBM公司产品,企业级,银行行业应用。
- postgresql:大象数据库。开源免费,竞争对手mysql。python一些开源项目的官方建议数据库,国外已经久负盛名,国内不流行。
- microsoft SQLServer
nosql
not only sql ,不仅仅是关系型数据库,非关系型数据库是一种补充。 特点,数据往往存在内存中,优点:读表效率高,场景:缓存登录表信息。
- mongodb
- redis
SQL
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
基本数据类型
- 整型 INT INTEGER LONGINT
- 字符串:STRING CHAR VARCHAE(variable char 变长字符串)。 如果存中文不知道可以存10个还是6个,varchar(20)会自动计算编码方式,不同语言中保持一致。
常用语句
- 创建表
create table student(
id int primary key auto increase,
name varchar(20),
age int
);
- 增
INSERT INTO (name,age)VALUES(‘小明’,13);
- 改
UPDATE FROM student set name='小红' WHERE name='小明';
- 删
DELETE FROM student WHERE name='小明';
//删除数据但不删除索引。 truncate DROP(完全删除掉表结构)
- 查
SELECT(id,name) FROM student;
SELECT * FROM student;
外键
外键: foreign key。
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键
如果把所有信息都放到一个表中,发现信息难以维护。
对业务逻辑按照属性划分维度,不同表。划分后易于维护。
id name age classes_id
1 小明 13 1
2 小红 13 1
3 小青 13 2
id name location
1 321 三楼
2 211 二楼
学生表里的班级字段类似变量指向,把两张表关联。
图形化工具
数据库可以命令行登录查询,但不直观,需要图形化工具,像excel一样方便查看数据。
- navicat:比较流行。 有独立版本 高级版通用数据库版。
- workbench: mysql官方工具,体验好,偶尔崩溃。
- datagrip:所有数据库都可以连接。jetbrains家的工具用的java写的。下载的datagraip安装后没有驱动,需要下载java连接sqltie数据库的"驱动",“jdbc(java database connector)for sqlite”。
数据库驱动:driver 。 python代码 →(驱动)python代码到sql的转换 →sql语句 → 数据库底层操作接口
python操作sqlite数据库基本示例
-
导入驱动
import sqlite3 # 目前的sqlite数据库版本是3,这里导入的是驱动。 -
在硬盘上创建数据库存储文件。sqlite数据库比较轻量,连接时自动创建。 注意不能new sqlite.db空文件
-
连接数据库。传入参数相对路径和绝对路径 存储数据库文件名,如果文件名不存在会自动创建。返回连接会话对象。
connect = sqlite3.connect('testsqlite.db')
print(connect)
- 从会话连接获取游标cursor,游标好像表格里的鼠标光标
cursor = connect.cursor()
- 执行sql语句。创建成功后代码看不到什么。如果纯文本编辑器打开可以看到一些信息。注意重复创建表会报错,第二次执行可以注释掉或者try except
cursor.execute('''
create table student(
id INT PRIMARY KEY ,
name VARCHAR (10),
age INT
);
''')
- 插入测试数据 sqlite比较轻量,上面创建表时没有说主键自增,插入假数据手动构造主键,注意不要主键重复。重量级数据库插入成功后有返回值——插入的行数,sqlite没有。
cursor.execute('''insert into student(id,name,age) values (1,'小明',13)''')
- 提交 更新、删除需要提交 查询不用
connect.commit()
#关闭连接,释放资源
cursor.close()
connect.close()