1.认识SQL:不管是什么开发语言还是开发方向,SQL都是开发人员无法绕开的话题,除了有一门精通的语言外,SQL语言也是开发人员必备的开发技能。
2.数据库:数据包含数据的存储和数据的计算,目前所学习的python编程语言就可归纳为数据计算这一类的,在个人开发或企业中我们一般使用数据库来存储数据,那么数据库又是如何存储数据的呢?列如以下有两个表格:
在这两个数据库里面提供了两个表:报名登记表和宿舍分配表,然后两个表里面又提供了学生的报名登记信息和宿舍分配的信息。总体可以分为三个层次:库,表,数据;也就是数据库去组织数据存储是按照库-表-数据这3个层次去组织数据的。可以使用数据库管理系统(也就是常说的数据库软件)去实现这种数据库形式的数据管理。数据库软件有很多,常见的有:
数据库与SQL是相辅相成的,数据库是用来存储数据的,而在这个过程中会涉及到:数据的增删,数据的删除,数据的修改,数据的查询和数据库数据表的管理。而SQL语言就是对一种数据库,数据进行操作,管理,查询的工具。(也就是使用数据库软件去获得库-表-数据,这种数据组织,存储的能力,并借助SQL语言完成对数据的增删改查等操作)
3.mysql的安装和使用:Mysql是一个中小型的数据库,简单易用性能好,可以说是开发人员必须会使用的一款数据库软件。Mysql的版本一共有四种:
在这里我们安装社区版的Mysql,首先打开安装的网站:downloads.mysql.com/archives/in... 进入到安装页面:
在安装那里我们选择离线安装。点击离线安装后进入到这个页面:
这里不要注册直接点击最下面的just start my download即可下载安装了。安装好了之后,可以打开命令提示符,输入MySQL -uroot -p,再输入密码就可以打开MySQL环境命令行了;在MySQL环境命令行下,可以通过以下操作:1.show databases;来查看有哪些数据库。2.use;数据库名 使用这个数据库。3.show tabies;查看数据库内有哪些表。4.exit;退出MySQL环境命令行等基本操作。
4.使用图形化工具DBeaver来操作MySQL:使用命令提示符进行MySQL的操作,不是很方便,一般的开发者都会使用第三方的图形化工具进行使用。DBeaver的下载地址:dbeaver.io/download,选择...
5.SQL语言的分类:数据库管理系统功能很多,不仅是储存数据,还包含:数据的管理,表的管理,库的管理,账户管理,权限管理等等。所以操作数据库的SQL语言,也基于功能,可以分为以下4类:(1)数据定义:DDL(Data Definition Language)库的创建删除,表的创建删除等;(2)数据的操纵:DML(Data Manipulation Language)新增数据,删除数据,修改数据等;(3)数据的控制:DCL(Data Control Language)新增用户,删除用户,密码修改,权限管理等;(4)数据查询:DQL(Data Query Language)基于需求查询和计算数据。
6.SQL的语法特征:
7.DDL-库管理:查看数据:SHOW DATABASES;使用数据库:USE 数据库名称;创建数据库:CREATE DATABASE 数据库名称 [CHARSET UTF8];删除数据库:DROP DATABASE 数据库名称;查看当前使用的数据库:SELECT DATABASE();
8.DDL-表管理:查看有哪些表:SHOW TABLES(注意:需要先选择数据库);删除表:DROP TABLE 表名称 / DROP TABLE IF EXISTS 表名称;创建表:CREATE TABLE 表名称(列名称 列类型,列名称 列类型,.......);列类型有:int--整形 float --浮点型 varchar --文本,长度为数字,做最大长度限制 data--日期类型 timestamp--时间截类型。
9.DML:DML是指数据操作语言,用来对数据库中表的数据记录进行更新。关键字:插入INSERT 删除DELETE 更新UPDATE。(1)数据插入INSERT:基础语法:INSERT INTO 表[(列1, 列2 ,......, 列n)](中括号代表可以省略) VALUES(值1,值2,......, 值n)[, 值1,值2,......, 值n),......,(值1,值2,......,值n)]。(2)数据删除DELETE: 基础语法:DELETE FROM 表名称 WHERE 条件判断 ;条件判断:列 操作符 值(操作符有: = < > <= >= != 等等,如:id = 5, id < 3, id >= 6 ,id != 5等等)。(3)数据的更新UPDATE:基础语法:UPDATE 表名 SET 列=值 WHERE 条件判断。如果没有后面的WHERE条件判断那么这一列的值就全部被修改了。
10.DQL:(1)基础查询:使用SELECT语句进行基础的数据查询 ,基础语法: SELECT 字段列表/* FROM 表(使用可以查看全部的列);SELECT 字段列表/ FROM 表 WHERE 条件判断(查看满足条件的部分数据);(2)分组聚合:什么是分组聚合呢?分组聚合就是按照某一特定标志把满足该特定标志的数据分到一起,如:统计班级中男生和女生的人数,就可以按照性别这一特定标志来分组,然后再分别统计每组的人数。基础语法:SELECT 字段/聚合函数 FROM 表 [WHERE 条件] GROUP BY 列。聚合函数有:SUM(列) 求和 , AVG(列) 求平均值 ,MIN(列) 求最小值 , MAX(列) 求最大值 , COUNT(列/) 求数量。(3)排序分页(对排序结果进行排序分页):结果排序:基础语法:SELECT 列/聚合函数/ FROM 表[WHERE 条件判断][GROUP BY 列] ORDER BY 列[ASC/DESC](ASC是从小大排序,DESC是从大到小排序)。结果分页限制:基础语法:SELECT 列/聚合函数/* FROM 表 [WHERE 条件判断][GROUP BY 列] [ORDER BY 列 ][ASC/DESC] LIMIT n[,m]。
11.Python&MySQL 使用Python执行SQL语句操作MySQL数据库软件:(1)我们首先来安装pymysql:在命令提示符里输入pip install pymysql 下载pymysql(2)如何去获取链接对象?首先要导入包:from pymysql import connection 再通过创建Connection(主机,端口,账户,密码)即可得到链接对象;最后通过链接对象.close()关闭和Mysql数据库的连接。(3)执行SQL查询语句:通过连接对象调用cursor()方法,得到游标对象,游标对象.execute()执行SQL语句,如果执行的是SQL查询语句就可以使用cursor.fetchall()得到全部的查询结果,再把结果封装到组数中即可。(4)commit提交:假如你执行了SQL的插入语句:
arduino
cursor.execute("insert into student values(10001, '周杰伦', 31, '男")
但最后的结果表中没有你插入的数据,这时候就需要通过连接对象.commit()再去确认数据,如此你才真正的把数据加入到表中了。如果你不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性。如下代码:
ini
conn = Connection(
host='localhost', # 主机名(或IP地址)
port=3306, # 端口,默认3306
user='root', # 账户名
password='124829', # 密码
autocommit=True # 设置自动提交
)
12.综合案例
题目要求:使用面向对象章节案例中的数据集,完成使用Python语言,读取数据,并将数据写入MySQL的功能。DDL定义:我们需要先创建一个数据库来使用,数据库名称:py_sql。基于数据结构我们可以得到建表语句:
sql
create table orders(
order_date date,
prder_id, varchar(225),
money int,
province varchar(10)
);
实现步骤:读取数据-封装数据对象-构建数据库连接-写入数据库 如下代码:
python
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):
return f"{self.date},{self.order_id},{self.money},{self.province}"
ini
"""
SQL 综合案例,读取文件,写入MySQL数据库中
"""
from file_define import TextFileReader, JsonFileReader
from data_define import Record
from pymysql import Connection
text_file_reader = TextFileReader("D://2011年1月销售数据,txt")
json_file_reader = JsonFileReader("D://2011年2月销售数据,text")
jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()
# 将两个月的数据合并为一个list来储存
all_data: list[Record] = jan_data + feb_data
# 构建MySQL链接对象
conn = Connection(
host="localhost",
port=3306,
user="root",
password="124829",
autocommit=True
)
# 获得游标对象
cursor = conn.cursor()
# 选择数据库
conn.select_db("py_sql")
for record in all_data:
sql = f"insert into orders(order_date, order_id, order_money, order_province)" \
f"values('{record.date}', '{record.order_id}', {record.money}, '{record.province}')"
# 执行SQL语句
cursor.execute(sql)
# 关闭MySQL链接对象
cursor.close()