数据库的由来
发展历程 | 说明 |
---|---|
人工管理阶段 | 用纸带等进行数据的存储 |
文件系统阶段 | 数据存储在文件中 |
数据库阶段 | 解决了文件系统问题 |
高级数据库阶段 | 分布式数据库 |
数据库的分类
数据库分类 | 说明 | 常用库 |
---|---|---|
关系型数据库 | 采用了关系模型来组织数据的数据库:关系模型指的就星二维表格模型 | Oracle Microsoft SQL Server MySQL SQLite |
非关系型数据库 | Not Only SQL 强调Key-Value的方式存储数据 |
Mongodb redis |
关系型数据库的使用场景
Web网站系统、日志记录系统、数据仓库系统、嵌入式系统
MySQL是一个 关系型数据库管理系统 \color{red}{关系型数据库管理系统} 关系型数据库管理系统软件。
关系型数据库管理系统-RDBMS
MySQL是一个关系型数据库管理系统软件,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System, 关系数据库管理系统)应用软件,它是由瑞典MySQL AB司开发,目前属于Oracle旗下产品,MySQL是最流行的关系型数据库管理系统中的一个。
关系型数据库管理系统可以分为:
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 delete |
DDL | 数据定义语句 | creat drop |
TPL | 事务处理语言 | begin transaction commit rollback |
DCL | 数据控制语言 | grant revoke |
MySQL的特点
MySQL的数据类型
数据类型 | 说明 |
---|---|
int, bit | 整数 |
decimal | 小数 |
varchar, char | 字符串 |
date, time, datetime | 日期和时间 |
enum | 枚举类型 |
MySQL的字段约束
约束参数 | 说明 |
---|---|
primary key | 主键约束 |
not null | 非空约束 |
unique | 唯一约束 |
default | 默认约束 |
sudo apt-get install mysql-server
sudo apt-get insatll mysql-client
sudo service mysql status
sudo service mysql stop
sudo service mysql start
sudo service mysql restart
tar -zxvf navicat112_mysql_cs_x64.tar.gz
cd navicate112_mysql_cs_x64
./start_navicat
安装包及破解工具下载: 百度网盘 【提取码:4KaE】
破解教程:Navicat Premium15永久破解版安装教程
mysql -uroot -p
select now();
exit/quit/[control+d]
show databases;
create database 数据库名 charset=utf-8;
use 数据库名;
select database();
drop database 数据库名;
show tables;
create table 表名(字段名称 数据类型 可选的约束条件, column1 datatype contral, ...);
alter table 表名 modify 列名 类型 约束;
drop table 表名;
desc 表名;
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 条件;
pymysql的安装
安装pymysql:sudo pip3 install pymysql
查看安装情况:pip show pymysql / pip3 list
卸载pymysql:sudo pip3 uninstall pymysql
pymysql的使用
import pymysql
conn = pymysql.connect(参数列表)
cursor = conn.cursor()
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)