一,数据库介绍
1.1什么是数据库
- 数据库就是数据存储的库,作用就是组织并存储数据。通过库->表->数据,三个层级去管理数据。
1.2数据库和SQL关系
- 数据库是用来存储数据的,在这个过程中,会涉及到,数据的增删改查等操作,而SQL语言就是对数据库,数据进行操作管理的工具。
- 使用数据库软件去获得库->表->数据,三个层级,这种数据组织,存储的能力并借助SQL语言,完成对数据的增删改查等操作。
1.3数据库软件
- 软件就是提供库->表->数据,这种数组组织形式的工具软件,也称之为数据库管理系统。
- 常见的软件:Oracle,Mysql,Sql Server。
二,MySQL安装
- 下载地址:MySql官网
- 一般选用离线安装包。
- 运行安装包:
三,MySQl软件入门使用
3.1命令提示符中使用MySQL
- 打开命令提示符工具,输入:mysql -uroot -p,回车输入密码,进入命令行环境。
- 常用SQL命令:
show databases 查看有哪些数据库
use 数据库名 使用某数据库
show tables 查看数据库有哪些表
exit 退出MySQL的命令环境
(1)进入mysql:
(2)查看自带的库
3.2使用图形化工具操作MySQL
- 使用命令提示符进行MySQL操作,不方便,可以使用mysql的图形化工具,如:DBeaver
- 下载地址:DBeaver官网
- 装好后打开
四,SQL基础与DDL
4.1SQL语言
- 创建数据库:
create database test chartset utf8;
show databases;
- 删除数据库
4.2SQL语言的分类
4.3DDL基础语法
- 查看表之前要先选中库:use 库名
-- DDL库管理操作
use world;
show tables;
- 运行SQL程序是,需要运行那一句直接选中然后再点击运行
- 创建表,表show出来:
- F5刷新:
- 删除表
五,SQL-DML
- DML是数据操作语言,用来对数据库中的表数据进行操作。
5.1表的插入数据INSERT
- 格式:
-- DDL库管理操作
create database Student;
use student;#使用student数据库
create table student(
id int,
name varchar(20),
age int
);
insert into student(id) values (1001),(1002),(1003);
show tables ;
- 当对表中所有列进行数据插入时,可以省略列名,直接给出values
insert into student values(1004,'周杰伦',25),(1005,'王力宏',28)
5.2表数据删除DELETE
delete from student where name ='王力宏';
delete from student where age =25;
delete from student ;#删除表中所有数据
5.3表的数据更新UPDATA
六,SQL-DQL
6.1基础查询
6.2分组聚合
- 使用Group by 参考值进行分组
- Group by 后面出现了哪个列,哪个列才能出现在前面SELECT的非聚合中。
- select
ID,name,age from student group by name,age;
ID没有在group by后面出现,所以前面不能这样写。
6.3排序分页
- 由于数据太多可以控制显示的数据量,或分页。
- limit n,m;表示从第n+1条语句开始,取m条数据。
总结:
七,python&MySQL
7.1第三方库安装
- 第三方库pymysql安装
7.2 在pycharm中用python语言链接数据库
from pymysql import Connection
#获取数据库连接对象
conn=Connection(
host='localhost',#主机名(ip地址)
port=3306,#端口号
user='root',
password='123456'
)
#打印mysql数据库软件信息
print(conn.get_server_info())
#关闭数据库的连接
conn.close()
7.3非查询语句,创建库,表等
- 创建表 test_pymysql
# # 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
# # 选择数据库
conn.select_db("student")
# # 执行sql
cursor.execute("create table test_pymysql(id int);")#最后的分号可以不写
7.4查询语句
cursor.execute("select * from test_pymysql")
result:tuple=cursor.fetchall()#注解返回的元组类型
print(result)
返回值是元组嵌套:
for re in result:
print(re)
7.5python执行SQL语句插入数据到MySQL
- 手动提交修改的数据
#插入数据到新表
#cursor.execute("create table test_pymysql2(id int,name varchar(255),age int);")#创建新表
cursor.execute("insert into test_pymysql2 values(1001,'周杰伦',25)")
#通过commit确认
conn.commit()
conn.close()
2. 自动提交
3. 总体代码:
#导包
from pymysql import Connection
#获取数据库连接对象
conn=Connection(
host='localhost',#主机名(ip地址)
port=3306,#端口号
user='root',
password='123456',
autocommit=True#自动提交
)
#打印mysql数据库软件信息
# print(conn.get_server_info())
# # 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
# # 选择数据库
conn.select_db("student")
# # 执行sql
#cursor.execute("create table test_pymysql(id int);")#最后的分号可以不写
# cursor.execute("select * from test_pymysql")
# result:tuple=cursor.fetchall()
# for re in result:
# print(re)
# # 关闭链接
#插入数据到新表
#cursor.execute("create table test_pymysql2(id int,name varchar(255),age int);")#创建新表
cursor.execute("insert into test_pymysql2 values(1002,'林俊杰',28)")
#通过commit确认
# conn.commit()
conn.close()
八,综合案例
- 案例需求:
数据格式:
- 数据库创建py_sql数据库用来存数据
create database py_sql charset utf8;#创建库
use py_sql;#使用库
#创建表
create table orders(
order_data date,
order_id varchar(255),
money int,
order_province varchar(10));
- 实现步骤:
- pycharm中操作
- 读取文件并编辑数据到同一个list中的操作步骤与面向对象章节中操作一样,创建三个文件
- data_file.py
"""数据封装类"""
class Record:#用来记录数据的基本信息,封装数据到此类中
def __init__(self,date,order_id,money,province):
self.date = date # 日期
self.order_id = order_id # 订单号
self.money = money # 销售额
self. province = province # 省份
def __str__(self):#防止文件类中返回值类型是Record对象地址
return f"{self.date},{self.order_id},{self.money},{self.province}"
- file_define.py
#和文件相关的类
#定义一个抽象类,确定需要哪些功能
import json
from data_define import Record
class FileReader:#抽象类
"""读取文件数据并将读取的数据转换成Record对象 ,将他们封装在list内返回即可"""
def file_reader(self)->list[Record]:
pass
#处理文本数据
class TextFileReader(FileReader):
def __init__(self,path):#定义变量记录文件路径
self.path=path
#复写父类方法
def file_reader(self) ->list[Record]:
f=open(self.path,"r",encoding="utf-8")
record_list:list[Record]=[]
for line in f.readlines():
line=line.strip()#读到的line中自带换行符,要去掉
datalist=line.split(",")#以逗号分割
record=Record(datalist[0],datalist[1],int(datalist[2]),datalist[3])
record_list.append(record)
f.close()
return record_list
#Json文件处理
class JsonFileReader(TextFileReader):
def __init__(self, path): # 定义变量记录文件路径
self.path = path
# 复写父类方法
def file_reader(self) -> list[Record]:
f = open(self.path, "r", encoding="utf-8")
record_list: list[Record] = []
for line in f.readlines():
data_dict=json.loads(line)#将JSON数据装换为字典
record=Record(data_dict["date"],data_dict["order_id"],int(data_dict["money"]),data_dict["province"])
record_list.append(record)
f.close()
return record_list
if __name__ == '__main__':
# text=TextFileReader("F:\Python学习资料\第13章资料/2011年1月销售数据.txt")
json_file=JsonFileReader("F:\Python学习资料\第13章资料/2011年2月销售数据JSON.txt")
# list1= text.file_reader()
list2=json_file.file_reader()
for l in list2:
print(l)
- main.py
#计算每日的销售额(以面向对象的思想)
#2封装数据对象,设计数据封装类data_define
from file_define import TextFileReader,JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
#控制一些可选选项显示
from pyecharts.options import *
#主题类型包
from pyecharts.globals import ThemeType
#1读取数据,设计FileReader类
#创建两个类对象
text_file=TextFileReader("F:\Python学习资料\第13章资料/2011年1月销售数据.txt")
json_file=JsonFileReader("F:\Python学习资料\第13章资料/2011年2月销售数据JSON.txt")
#读取一二月数据
Jan_data:list[Record]=text_file.file_reader()
Feb_data:list[Record]=json_file.file_reader()
#此时两个月份数据格式一样,可以合并为一个list存放
all_data:list[Record]=Jan_data+Feb_data
#print(all_data)
- 在main.py文件内添加数据库操作
#print(all_data)
#获取数据库连接对象
conn=Connection(
host='localhost',#主机名(ip地址)
port=3306,#端口号
user='root',
password='123456',
autocommit=True#自动提交
)
# # 执行非查询性质SQL
cursor = conn.cursor() # 获取到游标对象
# # 选择数据库
conn.select_db("py_sql")
#组织SQL语句
for record in all_data:
sql=f"insert into orders(order_date,order_id,money,province) values ('{record.date}','{record.order_id}',{record.money},'{record.province}')"
print(sql)
# 执行SQL语句
cursor.execute(sql)
#关闭数据库链接
conn.close()