文章目录
- 数据库概述
- Mysql概述
- Mysql安装与使用
- Navicat安装和使用
- Mysql终端指令操作
- Mysql和python交互
- 订单管理案例实现
数据库概述
-
数据库的由来
发展历程 说明 人工管理阶段 用纸带等进行数据的存储 文件系统阶段 数据存储在文件中 数据库阶段 解决了文件系统问题 高级数据库阶段 分布式数据库 -
数据库的分类
数据库分类 说明 常用库 关系型数据库 采用了关系模型来组织数据的数据库:关系模型指的就星二维表格模型 Oracle
Microsoft SQL Server
MySQL
SQLite非关系型数据库 Not Only SQL
强调Key-Value的方式存储数据Mongodb
redis -
关系型数据库的使用场景
Web网站系统、日志记录系统、数据仓库系统、嵌入式系统
Mysql概述
MySQL是一个 关系型数据库管理系统 \color{red}{关系型数据库管理系统} 关系型数据库管理系统软件。
-
关系型数据库管理系统-RDBMS
MySQL是一个关系型数据库管理系统软件,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System, 关系数据库管理系统)应用软件,它是由瑞典MySQL AB司开发,目前属于Oracle旗下产品,MySQL是最流行的关系型数据库管理系统中的一个。 -
关系型数据库管理系统可以分为:
- 关系型数据库服务端软件-Server
- 关系型数据库客户端软件-Client
-
关系型数据库管理系统的流程图:
-
关系型数据库管理系统的通信流程效果图:
-
SQL介绍
SQL(Structured Query Language)是 结构化查询语言 \color{red}{结构化查询语言} 结构化查询语言,是一种用来操作 R D B M S \color{red}{RDBMS} RDBMS的数据库的语言,也就是说通过SQL可以操作oracle, sql server, mysql, sqlite等关系型的数据库。 -
SQL语言的分类
简写 语义 说明 DQL 数据查询语句 select DML 数据操作语句 insert
update
deleteDDL 数据定义语句 creat
dropTPL 事务处理语言 begin transaction
commit
rollbackDCL 数据控制语言 grant
revoke -
MySQL的特点
- MySQL是开源的,所以你不需要支付额外的费用。
- M小ySQL支持大型的数据库。可以处理拥有上干万条记录的大型数据库。
- MySQL使用标准的SQL数据语言形式。
- MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口。这些编程语言包括C、C++、Python、Java、Ruby等等。
-
MySQL的数据类型
数据类型 说明 int, bit 整数 decimal 小数 varchar, char 字符串 date, time, datetime 日期和时间 enum 枚举类型 -
MySQL的字段约束
约束参数 说明 primary key 主键约束 not null 非空约束 unique 唯一约束 default 默认约束
Mysql安装与使用
- Mysql安装
MySQL数据库 服务 \color{red}{服务} 服务端软件的安装:sudo apt-get install mysql-server
MySQL数据库 客户 \color{red}{客户} 客户端软件的安装:sudo apt-get insatll mysql-client
- Mysql数据库服务端启动
查看MySQL服务状态:sudo service mysql status
停止MySQL服务:sudo service mysql stop
启动MySQL服务:sudo service mysql start
重启MySQL服务:sudo service mysql restart
- Mysql的配置文件
- mqsql配置文件的路径:/etc/mysql/mysql.conf.d/
- 配置项介绍
<1> port表示端口,默认为3306;
<2> bind-address表示服务器绑定的ip,默认为127.0.0.1;
<3> datadir表示数据库保存路径,默认为/var/lib/mysql;
<4> log_error表示错误日志,默认为/var/log/mysql/error.log;
- mqsql配置文件的路径:/etc/mysql/mysql.conf.d/
Navicat安装和使用
- Navicat介绍
Navicat是一款图形化界面的数据库客户端软件。 - Navicat的安装——基于Linux操作系统
- 官网下载安装包:https://www.navicat.com.cn
- 解压navicat安装包:
tar -zxvf navicat112_mysql_cs_x64.tar.gz
- cd到navicat安装包文件夹目录:
cd navicate112_mysql_cs_x64
- 运行navicat:
./start_navicat
安装包及破解工具下载: 百度网盘 【提取码:4KaE】
破解教程:Navicat Premium15永久破解版安装教程 - Navicat的连接mysql服务
Mysql终端指令操作
- Mysql登录登出客户端
连接mysql服务端指令:mysql -uroot -p
显示当前时间:select now();
退出连接:exit/quit/[control+d]
- Mysql数据库操作
查看所有数据库:show databases;
创建数据库:create database 数据库名 charset=utf-8;
使用数据库:use 数据库名;
查看当前使用的数据库:select database();
删除数据库:drop database 数据库名;
- Mysql表操作
查看所有当前库中的所有表:show tables;
创建表:create table 表名(字段名称 数据类型 可选的约束条件, column1 datatype contral, ...);
修改表字段类型:alter table 表名 modify 列名 类型 约束;
删除表:drop table 表名;
查看表结构:desc 表名;
- Mysql -CRUD操作
- 查询数据
查询所有列:select * from 表名;
查询指定列:select 列名1, 列名2,... from 表名;
- 增加数据
全列插入 - 值的顺序必须和字段顺序完全一致:insert into 表名 values(...);
部分列插入 - 值的顺序和给出的列的顺序对应:insert into 表名(列1, 列2,...) values(值1, 值2,...)
全列多行插入:insert into 表名 values(...), (...), (...);
部分列多行插入:insert into 表名(列1, 列2,...) values(值1,...), (值1,...), (值1,...)
- 修改数据:
update 表名 set 列1=值1, 列2=值2,... where 条件;
- 删除数据:
delete from 表名 where 条件;
- 查询数据
- Mysql数据库备份和恢复
-
备份导出:
mysqldump -u用户名 -p密码 数据库名 表名 > data.sql
(注意:不写表名默认导出所有数据表)
-
恢复导入:
cd 到数据文件路径下 mysql -u用户名 -p密码 use 数据库 source data.sql
-
Mysql和python交互
-
pymysql的安装
安装pymysql:sudo pip3 install pymysql
查看安装情况:pip show pymysql / pip3 list
卸载pymysql:sudo pip3 uninstall pymysql
-
pymysql的使用
- 导包:
import pymysql
- 创建和mysql服务端的连接对象:
conn = pymysql.connect(参数列表)
- 获取游标对象:
cursor = conn.cursor()
- 执行sql语句:
row_count = cursor.execute(sql)
- 获取查询结果集:
result = cursor.fetchall()
- 将增加和修改操作提交到数据库:
conn.commit()
- 回滚数据:
conn.rollback()
- 关闭游标对象:
cursor.close()
- 关闭连接:
conn.close()
- 导包:
-
pymysql查询数据
# 查询数据库goods下student表中的所有数据 # 1. 导包 import pymysql try: # 2. 连接mysql数据库的服务 conn = pymysql.Connect( # mysql服务端的IP,默认127.0.0.1/localhost,也可填真实ip host='192.168.90.172', user='root', password='mysql', database='goods', port=3306, charset='utf8' ) # 3. 创建游标对象 cur = conn.cursor() # 4. 编写sql语句 sql = 'select * from students;' # 5. 使用游标对象去调用sql cur.execute(sql) # 6. 获取查询的结果并打印 result = cur.fetchall() print(result) # 7. 关闭游标对象 cur.close() # 8. 关闭连接 conn.close() except Exception as e: print(e)
结果如下:
-
pymysql增删改数据
''' 对数据库goods下的students表进行如下操作: 1. 增加数据:李磊 35 男 2. 修改数据:李磊的名字改为王磊 3. 删除数据:王磊 ''' # 1. 导包 import pymysql # 2. 连接mysql数据库的服务 conn = pymysql.Connect( # mysql服务端的IP,默认127.0.0.1/localhost,也可填真实ip host='192.168.90.172', user='root', password='mysql', database='goods', port=3306, charset='utf8' ) # 3. 创建游标对象 cur = conn.cursor() try: # 4. 编写增加、修改、删除的sql语句 add_sql = 'insert into students values(%s, %s, %s, %s);' add_data = [0, '李磊', 35, '男'] update_sql = 'update students set name=%s where name = "李磊";' update_data = ['王磊'] delete_sql = 'delete from students where name=%s;' delete_data = ['王磊'] # 5. 使用游标对象执行sql cur.execute(add_sql, add_data) cur.execute(update_sql, update_data) cur.execute(delete_sql, delete_data) # 6. 提交操作 conn.commit() except Exception as e: print(e) # 数据回滚 conn.rollback() finally: # 7. 关闭游标对象 cur.close() # 8. 关闭连接 conn.close()
订单管理案例实现
-
需求分析
① 创建数据库orders
② 创建orders订单表
③ 插入测试数据orders.sql
④ Python和Mysql交互
⑤ 查询订单数据
⑥ 增加订单数据
⑦ 删除订单数据
⑧ 修改订单数据 -
实现步骤
-
建库和建表
--创建数据库 create database orders charset=utf8; --创建数据表 create table orders( id int not null auto_increment primary key, count int not null, price decimal(10,2) not null, freight decimal(10,2) not null, user varchar(50) not null, status enum('待支付','待发货','待收货') default '待支付' not null, time date not null );
-
插入测试数据
① cd素材的目录下
② 登录mysql客户端:mysql -uroot -p
③ 切换数据库:use orders
④ 导入测试数据:source orders.sql
-
实现订单查询功能
① 导包pymysql
② 连接mysql服务
③ 创建游标对象
④ 编写查询所有订单SQL语句
⑤ 执行SQL语句
⑥ 获取所有查询的结果
⑦ 将获取结果转换成列表字典格式
⑧ 对Mysql的操作加Try处理# 1 导包 import pymysql def order() # 2 链接mysql的服务端 conn = pymysql.Connect( user='root', password='mysql', host='192.168.90.172', database='orders', port=3306, charset='utf8' ) # 3 创建游标对象 cur = conn.cursor() try: # 4 编写 查询orders表的所有数据SQL sql = 'select * from orders;' # 5 使用游标对象执行SQL cur.execute(sql) # 6 获取查询的所有数据 fetchall() ==>元组 result = cur.fetchall() print('查询数据:', result) # 打印结果如下: # 查询数据:((1, 2, Decimal('100.00'), Decimal('10.00'), '老王', ‘待收货', datetime.data(2020, 1, 1)), (2, 3, Decimal('200.00'), Decimal('25.00'), '钱红', ’待支付', datatime.date(2020, 4,1))) # 7 将数据转换成[{}, {}] data_lst = [] for row in result: data_lst.append({ 'id': row[0], 'count': row[1], 'price': str(row[2]), 'freight': str(row[3]), 'user': row[4], 'status': row[5], 'time': str(row[6]) }) # 8 加个try优化下 except Exception as e: print('报错信息:', e) finally: # 关闭游标对象 cur.close() # 关闭连接 conn.close()
-
实现订单增加功能
① 导包pymysql
② 连接mysql服务
③ 创建游标对象
④ 编写增加订单的SQL语句
⑤ 执行SQL语句并提交
⑥ 对Mysql的操作加Try处理# 1 导包 import pymysql def add(data): # 2 链接mysql的服务端 conn = pymysql.Connect( user='root', password='mysql', host='192.168.90.172', database='orders', port=3306, charset='utf8' ) # 3 创建游标对象 cur =conn.cursor() try: # 4 编写 增加数据的SQL sql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)' # 5 使用游标对象执行SQL并提交 cur.execute(sql, data) conn.commit() # 6 加个try优化下 except Exception as e: print('报错信息:', e) # 回滚数据 conn.rollback() finally: # 关闭游标对象 cur.close() # 关闭连接 conn.close()
-
实现封装功能函数
查询和增加的功能重复度比较高,均有:导包、连接mysql、创建游标对象、执行SQL语句、Try语句。实现封装函数的操作:
① 定义封装函数的名字
② 粘贴重复度高的代码
③ 提交参数
④ 测试# 1 导包 import pymysql # 封装一个执行CRUD的函数 def execute_crud_sql(sql,data): # 2 链接mysql的服务端 conn = pymysql.Connect( user='root', password='mysql', host='192.168.90.172', database='orders', port=3306, charset='utf8' ) # 3 创建游标对象 cur = conn.cursor() try: # 4 编写 查询orders表的所有数据SQL # 5 使用游标对象执行SQL cur.execute(sql, data) # 6 提交操作 conn.commit() # 8 加个try优化下 except Exception as e: print('报错信息:', e) # 回滚数据 conn.rollback() finally: # 关闭游标对象 cur.close() # 关闭连接 conn.close() def add(data): sql = 'insert into orders values(%s,%s,%s,%s,%s,%s,%s)' execute_crud_sql(sql, data)
-
实现订单修改和删除功能
# 修改的SQL语句 update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s; # 将参数中id的顺序从第一个颠倒到最后一个 data.append(data.pop(0)) # 删除的SQL语句 delete from orders where id=%s;
# 1 导包 import pymysql # 封装一个执行CRUD的函数 def execute_crud_sql(sql,data): # 2 链接mysql的服务端 conn = pymysql.Connect( user='root', password='mysql', host='192.168.90.172', database='orders', port=3306, charset='utf8' ) # 3 创建游标对象 cur = conn.cursor() try: # 4 编写 查询orders表的所有数据SQL # 5 使用游标对象执行SQL cur.execute(sql, data) # 6 提交操作 conn.commit() # 8 加个try优化下 except Exception as e: print('报错信息:', e) # 回滚数据 conn.rollback() finally: # 关闭游标对象 cur.close() # 关闭连接 conn.close() # 修改订单数据 def update(data): print('修改的数据:', data) # ['7', '99', '9.90', '1.00', '明明','待收货', '2020-03-29'] data.append(data.pop(0)) # 1. 修改的SQL语句 sql = 'update orders set count=%s, price=%s, freight=%s, user=%s, status=%s, time=%s where id=%s' # 2. 执行调用 execute_crud_sql(sql, data) # 删除订单数据 def delete(data): # 1. 删除的SQL数据 sql = 'delete from orders where id=%s;' # 2. 执行 execute_crud_sql(sql, data)
-