python 7_SQL基础

这篇博客介绍了Python与SQL的基础知识,包括数据库的概念、MySQL的安装和使用,以及SQL的四大类别:DDL、DML、DCL和DQL。详细讲解了如何使用SQL进行数据查询、插入、删除和更新,还探讨了Python中使用pymysql库操作MySQL的方法和数据插入的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 7_SQL基础

1. 数据库介绍

对于数据的处理可以分为数据的存储(TXT、EXCEL、数据库)、数据的计算(编程语言)

数据的存储:数据->表->库

数据库管理需要借助数据库管理系统,即我们常说的数据库软件:image-20240418105804066

数据库是用来存储数据的,在这个过程中,会涉及到:数据的新增、数据的删除、数据的修改、数据的查询、数据库/数据表的管理等等,而SQL语言,就是一种对数据库、数据进行操作、管理、查询的工具;使用数据库软件去获得库->表->数据,这种数据组织、存储的能力,并借助SQL语言,完成对数据的增删改查等操作

2. MySQL的安装

  • MySQL介绍
    • MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品
    • MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,一般开发都选择 MySQL 作为数据库
    • 简单来说,MySQL是一个中小型的数据库,简单易用性能不错,在企业中频繁出现;大多数开发人员都会和MySQL打交道,可以说是开发人员必须会使用的一款数据库软件
  • MySQL的版本
    • 免费:社区版、集群版
    • 收费:商业版、高级集群版
  • MySQL安装
    • 下载地址:https://downloads.mysql.com/archives/installer

3. MySQL的入门使用

  • 在命令提示符内使用MySQL

    image-20240418114645470

    image-20240418114723764

    • mysql -uroot -p:输入密码进入命令环境
    • show databases:查看有哪些数据库
    • use 数据库名:使用某个数据库
    • show tables:查看数据库内有哪些表
    • exit:退出MySQL的命令行环境
    • 等基础命令
  • 使用图形化工具操作MySQL

    • 使用命令提示符进行MySQL的操作,不是太方便,一般开发者都会使用第三方的图形化工具进行使用
    • DBeaver下载地址:https://dbeaver.io/download

4. SQL基础与DDL

  • SQL概述

    • 全称结构化查询语言,用于访问和处理数据库的标准的计算机语言
    • SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现
    • 经过多年发展,SQL以成为数据库领域统一的数据操作标准语言,可以说几乎市面上所有的数据库系统都支持使用SQL语言来操作
    • SQL语言就是操作数据库的专用工具
  • SQL语言的分类

    由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还包括数据的管理、表的管理、库的管理、账户管理、权限管理等等;所以操作数据库的SQL语句基于功能可以分为4类:

    • 数据定义:
      • DDL
      • 库的创建删除、表的创建删除等等
    • 数据操纵:
      • DML
      • 新增数据、删除数据、修改数据等等
    • 数据控制:
      • DCL
      • 新增用户、删除用户、密码修改、权限管理等等
    • 数据查询:
      • DQL
      • 基于需求查询和计算数据
  • SQL的语法特征

    • 大小写不敏感
    • 可以单行/多行书写,最后以分号(;)结束
    • 支持注释:
      • 单行注释:-- 注释内容
      • 单行注释:# 注释内容
      • 多行注释:/* 注释内容 */
  • DDL - 库管理

    • 基本语句:

      # 查看数据库
      show databases;
      # 使用数据库
      use databasename;
      # 创建数据库
      create database databasename [charset utf8];
      # 删除数据库
      drop database databasename;
      # 查看当前使用的数据库
      select database();
      
    • 示例:

      image-20240418135354445

    image-20240418135234364

    image-20240418135739939

    image-20240418135923885

  • DDL - 表管理

    • 基本语法:

      -- 查看有那些表(注意:需要先选择数据库)
      show tables;
      -- 创建表
      create table newtablename(
      	username varchar,
      	age int
      );
      -- 删除表
      drop table newtablename;
      drop table if exists newtablename;
      

      常用的列类型如下:

      类型描述
      int整数
      float浮点数
      varchar()文本,长度为数字,最大为255
      date日期类型
      timestamp时间戳类型
    • 示例:

      image-20240419083722552

      image-20240419084044012

      image-20240419084322195

5. SQL - DML

DML是指数据操作语言,英文全称data manipulation languoge,用来对数据库中表的数据记录进行更新

  • 插入insert

    • 基础语法:

      insert into tablename[(col1, col2,col3)] values(value1, value2, value3)[, (value1, value2, value3),......,(value1, value2, value3)]
      
    • 示例:

      -- 创建表
      create table student(
      	id int,
      	name varchar(10),
      	age int
      );
      show tables;
      -- 仅插入id列数据(插入3条数据)
      insert into student(id) values(10001),(10002),(10003);
      -- 插入全部列数据(插入3条数据)
      insert into student(id, name, age) values(10004, 'ausgelebt', 20),(10005, 'ausgelebt2', 22),(10006, 'ausgelebt3', 23);
      -- 插入全部列数据(插入3条数据)(快捷写法)
      insert into student values(10007, 'ausgelebt7', 27),(10008, 'ausgelebt8', 28),(10009, 'ausgelebt9', 29);
      
      

      image-20240419090410666

    • 注意:

      • 插入字符串数据,需要用单引号包围
      • 插入全部列的时候,列的列表可以省略
  • 删除delete

    • 基础语法:

      delete from tableName [where 条件判断]
      

      条件判断:列 操作符 值,其中操作符:= < > <= >= !=等等

    • 示例(接上案例):

      -- 删除name为ausgelebt的数据
      delete from student where name='ausgelebt';
      -- 删除age大于25的数据
      delete from student where age>25;
      -- 删除全部数据
      delete from student;
      

      image-20240419091321102

      image-20240419091346743

      image-20240419091435150

  • 更新update

    • 基础语法:

      update tableName set col=value [where 条件判断]
      

      条件判断同数据删除

    • 示例:

      -- 修改id为10001的name为lalala
      update student set name="lalala" where id=10001
      -- 修改全部数据的age为20
      update student set age=20
      

      image-20240419092341051

6. SQL - DQL

6.1 基础查询

  • 基础数据查询

    • 从表中选择某些列进行展示

    • 基础语法:

      select 字段列表|* from tableName
      
    • 示例(接上案例):

      -- 查询id,name两个列
      select id,name from student
      -- 查询全部列
      select * from student
      

      image-20240419093312859

      image-20240419093334410

  • 基础数据查询 - 过滤

    • 基础语法:

      select 字段列表|* from tableName where 条件判断
      

      条件判断同数据删除

    • 示例(接上案例):

      -- 查询id为10005的全部
      select * from student where id=10005
      -- 查询id>10005的id,name两个列
      select id,name from student where id>10005
      

      image-20240419100132808

      image-20240419100157824

6.2 分组聚合

分组聚合,需要按特定属性分组,然后聚合每组的信息

  • 基础语法:

    select 字段|聚合函数 from[where 条件] group by
    聚合函数描述
    sum(列)求和
    avg(列)求平均值
    min(列)求最小值
    max(列)求最大值
    count(列|*)求数量
  • 示例:

    create table student(
    	id int,
    	name varchar(20),
    	age int,
    	gender varchar(10)
    );
    insert into student values(1001, 'name1', 19, 'boy'),
    (1002, 'name2', 20, 'boy'),
    (1003, 'name3', 21, 'girl'),
    (1004, 'name4', 19, 'boy'),
    (1005, 'name5', 20, 'girl');
    
    -- 按性别分组,统计各组人数
    select gender,count(*) from student group by gender;
    -- 按性别分组,统计各组平均年龄
    select gender,avg(age) from student group by gender;
    -- 按性别分组,统计各组最大最小年龄
    select gender,min(age),max(age) from student group by gender;
    

    image-20240419101752874

    image-20240419101816481

    image-20240419101838893

  • 注意:group by中出现了哪个列,哪个列才能出现在select的字段中

6.3 排序分页

  • 结果排序

    • 可以对查询的结果,使用order by关键字,指定某个列进行排序

    • 基础语法:

      select|聚合函数|* fromwhere ...
      group by ...
      order by ... [asc | desc]
      
    • 示例:

      select * from student order by age desc;
      -- 按id升序输出age>20的所有列
      select * from student where age>=20 order by id asc;
      

      image-20240419103146650

      image-20240419103205948

  • 结果分页限制

    • 可以使用limit关键字,对查询结果进行数量限制或分页显示

    • 基础语法:

      select|聚合函数|* fromwhere ...
      group by ...
      order by ... [asc | desc]
      limit n[,m]
      
    • 示例:

      create table student(
      	id int,
      	name varchar(20),
      	age int,
      	gender varchar(10)
      );
      insert into student values(1001, 'name1', 19, 'boy'),
      (1002, 'name2', 20, 'boy'),
      (1003, 'name3', 21, 'girl'),
      (1004, 'name4', 24, 'boy'),
      (1005, 'name5', 20, 'girl'),
      (1006, 'name6', 25, 'boy'),
      (1007, 'name7', 23, 'boy'),
      (1008, 'name8', 22, 'girl'),
      (1009, 'name9', 19, 'boy'),
      (1010, 'name10', 25, 'girl');
      
      -- 查询结果只保留5条
      select * from student limit 5;
      -- 年龄最大的5个人
      select * from student order by age desc limit 5;
      -- 从第3条开始,取5条
      select * from student limit 3,5;
      

      image-20240419104038766

      image-20240419104058558

      image-20240419104123575

7. Python & MySQL

7.1 基础使用

  • pymysql

    • 除了使用图形化工具以外,也可以使用编程语言来执行SQL从而操作数据库
    • 在python中,使用第三方库pymysql来完成对mysql数据库的操作
    • 安装
  • 创建到mysql的数据库链接

    from pymysql import connection
    # 获取到mysql数据库的链接对象
    connection = connection(
        host='localhost',       # 主机名/IP地址
        port=3306,              # 端口,默认3306
        user='root',            # 账户名
        password='<PASSWORD>'   # 密码
    )
    # 打印mysql数据库软件信息
    print(connection.get_server_info())
    # 关闭到数据库的链接
    connection.close()
    

    image-20240419105429904

  • 执行sql语句

    • 非查询性质的SQL语句

      from pymysql import Connection
      # 获取到mysql数据库的链接对象
      connection = Connection(
          host='localhost',       # 主机名/IP地址
          port=3306,              # 端口,默认3306
          user='root',            # 账户名
          password='<PASSWORD>'   # 密码
      )
      # 获取游标对象
      cursor = connection.cursor()
      connection.select_db("world")        # 先选择数据库
      # 使用游标对象执行sql语句
      cursor.execute('create table test_pymysql(id int, info varchar(255))')
      # 关闭到数据库的链接
      connection.close()
      

      image-20240423170902846

    • 查询性质的SQL语句

      from pymysql import Connection
      # 获取到mysql数据库的链接对象
      connection = Connection(
          host='localhost',       # 主机名/IP地址
          port=3306,              # 端口,默认3306
          user='root',            # 账户名
          password='Bian_123456'   # 密码
      )
      # 获取游标对象
      cursor = connection.cursor()
      connection.select_db("world")        # 先选择数据库
      # 使用游标对象执行sql语句
      cursor.execute('select * from student')
      # 获取查询结果
      result: tuple = cursor.fetchall()
      for row in result:
          print(row)
      # 关闭到数据库的链接
      connection.close()
      

      image-20240423171222268

      • 注:游标对象使用fetchall()方法,得到的是全部的查询结果,是一个元组;该元组内部嵌套了元组,嵌套的元组就是一行查询结果
  • 总结

    • python中使用什么第三方库来操作MySQL?如何安装?

      • 使用第三方库:pymysql
      • 安装:pip install pymysql
    • 如何获取链接对象?

      • from pymysql import Connection 导包
      • Connection(主机, 端口, 账号, 密码) 即可得到链接对象
      • 链接对象.close() 关闭和mysql的连接
    • 如何执行SQL查询?

      通过连接对象调用cursor()方法,得到游标对象

      • 游标对象.execute() 执行SQL语句
      • 游标对象.fetchall() 得到全部的查询结果封装入元组内

7.2 数据插入

pymysql在执行数据插入或其它数据更改的sql语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为

通过**链接对象.commit()**即可确认此行为

如果不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性(autocommit=True),即可自动提交、无需手动commit

from pymysql import Connection
# 获取到mysql数据库的链接对象
connection = Connection(
    host='localhost',       # 主机名/IP地址
    port=3306,              # 端口,默认3306
    user='root',            # 账户名
    password='Bian_123456', # 密码
    autocommit=True         # 设置自动提交
)
# 获取游标对象
cursor = connection.cursor()
connection.select_db("world")        # 先选择数据库
# 使用游标对象执行sql语句
cursor.execute("insert into student values (11111, 'ausgelebt',14, 'girl')")
# 关闭到数据库的链接
connection.close()

image-20240423173415540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值