云计算百科
云计算领域专业知识百科平台

MySQL 增删改查(CRUD)详解 + Python pymysql实操

MySQL 增删改查(CRUD)详解 + Python pymysql实操

适配CSDN Markdown,直接全选复制粘贴即可,无特殊样式,代码块、表格正常识别

前言

CRUD 是数据库最核心的四个操作:新增(Create)、查询(Read)、修改(Update)、删除(Delete)。不管是后端开发、期末数据库考试,还是写 Python 项目,这都是基本功。很多新手容易踩 UPDATE、DELETE 忘记 WHERE 条件、忘记事务提交、SQL 注入这些坑,本文从原生 SQL 讲到 Python 代码实操。

环境说明:MySQL 8.0,使用 pymysql 库。

一、准备测试表

先建一张学生表,后面所有 SQL 都基于这张表测试

CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',
name VARCHAR(20) NOT NULL COMMENT '姓名',
age TINYINT COMMENT '年龄',
score INT COMMENT '分数',
is_delete TINYINT DEFAULT 0 COMMENT '0正常 1逻辑删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、查询 Read(SELECT)

查询是使用最多的操作,读取表里面的数据。
基础语法:

— 查询全部字段
SELECT * FROM student;

— 查询指定字段(推荐,不要直接用*)
SELECT id,name,score FROM student;

— 带条件查询
SELECT * FROM student WHERE age >= 18;

— 模糊查询
SELECT * FROM student WHERE name LIKE '张%';

— 排序 order by
SELECT * FROM student ORDER BY score DESC;

— 分页 limit
SELECT * FROM student LIMIT 0,5;

— 分组 + having
SELECT age,COUNT(*) num FROM student GROUP BY age HAVING COUNT(*) > 1;

💡 踩坑点:WHERE 过滤原始数据,HAVING 过滤分组之后的结果;GROUP BY后面的字段,select里一般只能放分组字段和聚合函数。

三、新增 Create(INSERT)

往表里插入数据据

— 单条插入
INSERT INTO student(name,age,score) VALUES ('张三',19,88);

— 批量插入(效率更高)
INSERT INTO student(name,age,score)
VALUES
('李四',20,76),
('王五',19,92);
```> 💡 踩坑点:主键设置 AUTO_INCREMENT 自增,插入的时候不用给 id 传值;字符类型数据必须加单引号。号。

## 四、修改 Update(UPDATE修改已经存在的数据。数据
```sql
— 修改单个字段
UPDATE student SET score = 90 WHERE id = 1;

— 修改多个字UPDATE student SET age = 20, score = 85 WHERE name = '张三';';

⚠️【重中之重】UPDATE 如果不加 WHERE 条件,整张表所有行全部被修改,线上库属于重大事故!
建议习先写 SELECT 核对 WHERE 条件条件,确认是要改的数再改成 UPDATE。E。## 五、删除 Delete (DELETE)E)

— 物理删除,删掉这一行真实数据
DELETE FROM student WHERE id = 2;

三个删除语句对比(考试高频考点)

|语句|作用|能不能带where|自增主键|事务可回滚|
| —- | —- | —- | —- | —- | DELETE | 删除行数据 | ✅ 支持 | 保留,不会重置 | ✅ 可以回滚 |滚| TRUNCATE | 清空整张表 | ❌ 不能 | 重置从 1 开始 | ❌ 不支持回滚 |滚| DROP | 直接删掉整个表结构 | ❌ 不能 | 表直接消失 | ❌ 不支持回滚 |滚|> 💡 业务常用方案:逻辑删除(软删除),不执行 DELETE。

更新 is_delete=1 代表删除,查询的时候带上 WHERE is_delete=0=0`

— 逻辑删除
UPDATE student SET is_delete=1 WHERE id=3;
— 查询有效数据
SELECT * FROM student WHERE is_delete=0;

六、Python pymysql 连接数据库实现CRUD

1、先安装依赖

pip install pymysql
`### 2、封装工具类 db.py(考试 + 项目通用模板)模板)
`
``python
import pymysql

class MySQLHelper:
def __init__(self, host='localhost', user='root', password='123456', database='test_db'):
# 建立数据库连接
self.conn = pymysql.connect(
host=host,
user=user,
password=password,
database=database,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)

# 查询多条
def query_all(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
return cur.fetchall()

# 查询单条
def query_one(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
return cur.fetchone()

# 增、改、删统一方法
def execute_sql(self, sql, params=None):
params = params or ()
with self.conn.cursor() as cur:
cur.execute(sql, params)
self.conn.commit() # DML操作必须提交事务
return cur.rowcount

# 关闭连接
def close(self):
self.conn.close()

# 测试调用
if __name__ == '__main__':
db = MySQLHelper(password="你的数据库密码", database="student")

# 新增
# sql = "INSERT INTO student(name,age,score) VALUES (%s,%s,%s)"
# db.execute_sql(sql, ("小明",18,80))

# 修改
# sql = "UPDATE student SET score=%s WHERE id=%s"
# db.execute_sql(sql, (86, 1))

# 删除
# sql = "DELETE FROM student WHERE id=%s"
# db.execute_sql(sql, (1,))

# 查询
res = db.query_all("SELECT * FROM student WHERE is_delete=0")
print(res)
db.close()

💡 > 1. %s 是占位符,不是字符串拼接!用来防止 SQL 注入,绝对不要用 f-string 拼接 SQL 语句语句**
2. insert/update/delete 执行完必须 commit() 提交事务,否则数据库数据不会变化
3. with 管理游标,自动关闭游标,不用手动写 cur.close()

七、高频易1. DQL(select)不用 commit;DML(insert/update/delete)需要 commitm2. update、delete 一定要加 where 条件r3. 模糊查询 % 匹配任意字符,_ 匹配单个字符单4. 外键约束保证参照完整性,主键唯一非空,唯一约束允许一个 nulln5. 事务 ACID:原子性、一致性、隔离性、持久性、持久性

  • 逻辑删除适合业务系统,物理删除一般用于清理垃圾数据
  • 八CRUD 看着简单,但是细节坑非常多。熟练掌握原生 SQL,再搭配 Python 封装工具类,工具类,不管是数据库期末考试、后端开发写接口,都够用了。后续可以继续学习索引、事务、锁、联表查询这些进阶内容。


    标签:MySQL CRUD pymysql 数据库增删改查 Python操作数据库

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » MySQL 增删改查(CRUD)详解 + Python pymysql实操
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!