【Django学习笔记(八)】MySQL的数据管理

前言

在本文中,将深入剖析 MySQL 数据库的核心操作——增删改查(CRUD),并探讨如何利用 Python 的第三方库 pymysql 高效执行这些操作。通过具体案例的展示,读者不仅能够理解 MySQL 的基本语法和逻辑,还能掌握 pymysql 库的使用方法,从而在实际开发中灵活运用,实现数据的精准管理。

正文

平时在开发系统时,一般情况下:

  • 创建数据库
  • 创建数据表

都是需要提前通过工具+命令创建。

1、新增数据

insert into 表名称(列名,列名, ...) values(,, ...);
insert into 表名称(列名,列名, ...) values(,, ...),(,, ...),(,, ...),...;

2、删除数据

delete from 表名称;				--删除所有数据
delete from 表名称 where 条件;	--删除指定数据

在这里插入图片描述
删除 id = 3 的数据

delete from tb7 where id=3;

在这里插入图片描述

3、修改数据

update 表名称 set=;				--修改一列
update 表名称 set=,=;		--修改多列
update 表名称 set=where 条件;		--修改某行某列

在这里插入图片描述

4、查询数据

select 字段名(或者*) from 表名称;
select 字段名(或者*) from 表名称 where 条件;

在这里插入图片描述

5、案例:员工管理

使用 MySQL 内置工具(命令)

  • 创建数据库:unicom;

  • 创建数据表:admin;

    表名:admin;
    列:
        id,整型,自增,主键;
        username,字符串,不为空;
        password,字符串,不为空;
        mobile,字符串,不为空
    
  • Python代码实现:

    • 添加用户;
    • 删除用户;
    • 查看用户;
    • 更新用户信息;

5.1 创建表结构

5.1.1 创建数据库
create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5.1.2 创建数据表
create table admin(
id int not null auto_increment primary key,
username varchar(16) not null,
password char(64) not null,
mobile char(11) not null
) default charset=utf8;

在这里插入图片描述

5.2 Python操作MySQL

用 Python 代码连接 MySQL 并发送指令,需要使用第三方库 pymysql

5.2.1 pymysql 的基本操作步骤
  1. 创建数据库连接对象+游标对象
  2. 利用游标对象的 execute() 执行 sql 命令
  3. 提交到数据库执行:commit()
  4. 关闭游标+断开数据库连接
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
cursor.execute("insert into admin(username,password,mobile) values('Jack','123','17766665555')")

# 3、提交到数据库执行:commit()
conn.commit()

# 4、关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.2 优化 pymysql 的基本操作步骤

注意:
千万不要使用字符串格式化做 SQL 的拼接,会有SQL注入的风险,需要使用 cursor.execute(sql, [参数1, 参数2, …])

import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
cursor.execute(sql, ['LiLei', '000000', '13512349999'])

# 3、提交到数据库执行:commit()
conn.commit()

# 4、关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

或者:

sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {'n1': 'HanMeimei', 'n2': '123456', 'n3': '11377775555'})

在这里插入图片描述

5.2.3 查询数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2、利用游标对象的 execute() 执行 sql 命令
sql = "select * from admin where id > %s"
cursor.execute(sql, [1, ])
# 查询所有符合条件的数据,为列表套多个字典
data_list = cursor.fetchall()
# 遍历数据
for row_dict in data_list:
    print(row_dict)

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

获取符合条件的第一条数据:cursor.fetone()

5.2.4 修改数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.利用游标对象的 execute() 执行 sql 命令
sql = "update admin set mobile=%s where id = %s"
cursor.execute(sql, ['13088889999', 3])
conn.commit()

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.5 删除数据
import pymysql

# 1、创建数据库连接对象+游标对象
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.利用游标对象的 execute() 执行 sql 命令
sql = "delete from admin where id = %s"
cursor.execute(sql, [3, ])
conn.commit()

# 3.关闭游标+断开数据库连接
cursor.close()
conn.close()

在这里插入图片描述

5.2.5 注意事项
  • 在进行 新增、删除、修改时,一定记得要 commit ,不然数据库没有数据

    cursor.execute("...")
    conn.commit()
    
  • 在查询时,不需要 commit,执行 fetchall / fetchone

    cursor.execute("...")
    
    # 第一条数据,字典,无数据时是空列表
    cursor.fetchone()
    
    # 所有数据,列表套字典,无数据是是None
    cursor.fetchall()
    
  • 对于 SQL 语句不要用 Python 的字符串格式化进行拼接(会被SQL注入),一定要使用 execute + 参数

    cursor.execute(sql, ['xxx', 'xxx', 'xxx'])
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禾戊之昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值