当前位置: 首页 > news >正文

Python——MySQL数据库编程

MySQL 是现在最流行的关系型数据库管理系统,在 WEB 开发中,MySQL 是最好的 RDBMS 应用软件之一。接下来,让我们快速掌握
python 使用 MySQL 的相关知识,并轻松使用 MySQL 数据库。

第1关:python数据库编程之创建数据库

Python 如何使用 MySQL?
python 最为强大的一点就是社区的庞大,有着各种方便使用的开源库,使 python 在短短时间内就拥有了大量的用户,并且由于使用库及其简单,可以将其他语言中需要大量代码才能完成的操作浓缩于短短几行代码中。我们这里给出几种用与连接 MySQL 的库:

MySQL-python
mysqlclient
PyMySQL
peewee
SQLAlchemy
可以在命令行中使用pip install (库名)来安装相应的第三方库。

接下来,我们将使用pymysql连接数据库

先安装第三方库
安装第三方库在这里插入图片描述

总览过程:
查看现有的数据库
在这里插入图片描述
创建test_3_21数据库

import pymysql

# 连接mysql,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='localhost',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        charset='utf8mb4',   # 设置字符集为utf8mb4,支持存储更多字符集,包括emoji等
        passwd='123456'      # 用于登录MySQL的密码
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()
    # 创建数据库 if not exists,避免重复创建
    cursor.execute("create database if not exists test_3_21 character set utf8 collate utf8_general_ci")
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

在这里插入图片描述
可以发现,通过python代码就可以创建数据库了。
那么分析一下代码:

第一步
导入第三方库
在这里插入图片描述
第二步建立与数据库的连接
在这里插入图片描述

第三步创建游标
在这里插入图片描述
游标(cursor)是数据库操作的工具,目的是用来执行 SQL 查询和获取查询结果。简而言之,游标是用来“控制”SQL语句执行的对象。

在 MySQL 中,游标负责将 SQL 语句发送到数据库,并负责处理从数据库返回的结果。
每次执行 cursor.execute() 都会发送 SQL 语句到 MySQL 服务器,游标帮助我们处理这些语句并获取执行结果。

第四步操作数据库
在这里插入图片描述
注意:在数据库中有字符集,以及排序规则两个设置
字符集:定义了字符以及字符的编码。
在数据库中默认编码的不同可能导致数据乱码的现象,推荐设置字符集为utf8
创建数据库时在尾部追加default cha\fracter set utf8即可设置
排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:
1、两个不同的字符集不能有相同的排序规则
2、两个字符集有一个默认的排序规则
3、有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary).
创建数据库时在尾部追加collate utf8_general_ci即可完成排序规则的设置

第五步结束关闭
在这里插入图片描述

第2关:python数据库编程之创建数据表

前面已经知道了怎么连接mysql,创建数据库了,那么我们怎么在一个数据库中创建表呢

总览过程:
先看一下是否有表
在这里插入图片描述
执行代码

import pymysql

# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='127.0.0.1',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        passwd='123456',     # 用于登录MySQL的密码
        db='test_3_21',          # 指定要连接的数据库名称
        charset='utf8mb4'    # 设置字符集为utf8mb4
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()

    # 创建表格 students,字段包含 id, name, age
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS students (
        id INT AUTO_INCREMENT PRIMARY KEY,  # id为自增主键
        name VARCHAR(100) NOT NULL,         # 姓名不能为空
        age INT NOT NULL                    # 年龄不能为空
    )
    """)

    # 提交事务(如果没有commit,表的创建不会生效)
    conn.commit()

    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

查看结果
在这里插入图片描述

第3关:python数据库编程之插入数据

给刚刚创建的student表插入一条数据

过程总览
先看一下表数据
在这里插入图片描述
运行代码

import pymysql

# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='127.0.0.1',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        passwd='123456',     # 用于登录MySQL的密码
        db='test_3_21',      # 指定要连接的数据库名称
        charset='utf8mb4'    # 设置字符集为utf8mb4
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()

    # 插入一条数据
    cursor.execute("""
    INSERT INTO students (name, age) 
    VALUES (%s, %s)
    """, ("John Doe", 25))  # 插入一名名为 John Doe,年龄为 25 的学生

    # 提交事务,确保插入数据生效
    conn.commit()

    # 输出插入的结果
    print("Inserted a new student into the 'students' table.")

    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

运行结果
在这里插入图片描述
因为我们设置了表是自增的,所以默认从1开始

第4关:python数据库编程之查询数据

使用python代码查看刚刚的数据
代码

import pymysql

# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='localhost',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        passwd='123456',     # 用于登录MySQL的密码
        db='test_3_21',      # 指定要连接的数据库名称
        charset='utf8mb4'    # 设置字符集为utf8mb4
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()

    # 查询 students 表中的所有数据
    cursor.execute("SELECT * FROM students")
    
    # 获取查询结果
    results = cursor.fetchall()
    
     # 显示表中的数据
    print("\nStudents table contents:")
    print("ID | Name       | Age")
    print("-" * 30)
    for row in results:
        print(f"{row[0]}  | {row[1]:<10} | {row[2]}")
    
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

运行结果
在这里插入图片描述

第5关:python数据库编程之修改数据

把刚刚插入的数据名字改成张三
代码

import pymysql

# 连接mysql,连接数据库test_3_21,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='localhost',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        passwd='123456',     # 用于登录MySQL的密码
        db='test_3_21',      # 指定要连接的数据库名称
        charset='utf8mb4'    # 设置字符集为utf8mb4
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()

    # 修改 students 表中的数据,将 id = 1 的记录的名字改为 "张三"
    cursor.execute("""
    UPDATE students 
    SET name = %s 
    WHERE id = %s
    """, ("张三", 1))

    # 提交事务,确保修改生效
    conn.commit()
    print("Updated the name to '张三' for student with id = 1.")

    # 查询 students 表中的所有数据以验证修改
    cursor.execute("SELECT * FROM students")
    
    # 获取查询结果
    results = cursor.fetchall()
    
    # 显示表中的数据
    print("\nStudents table contents after update:")
    print("ID | Name       | Age")
    print("-" * 30)
    for row in results:
        print(f"{row[0]}  | {row[1]:<10} | {row[2]}")

    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

结果
在这里插入图片描述

第6关:python数据库编程之删除数据

删除记录是张三的记录
代码

import pymysql

# 连接mysql,连接数据库test_3_21,创建连接并返回连接对象
def connect():
    conn = pymysql.connect(
        host='127.0.0.1',    # MySQL服务器的IP地址
        port=3306,           # MySQL服务器的端口号
        user='root',         # 用于登录MySQL的用户名
        passwd='123456',     # 用于登录MySQL的密码
        db='test_3_21',      # 指定要连接的数据库名称
        charset='utf8mb4'    # 设置字符集为utf8mb4
    )
    return conn

def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()

    # 删除 students 表中名字为 "张三" 的数据
    cursor.execute("""
    DELETE FROM students 
    WHERE name = %s
    """, ("张三",))

    # 提交事务,确保删除生效
    conn.commit()
    print("Deleted student(s) with name '张三' from the 'students' table.")

    # 查询 students 表中的所有数据以验证删除
    cursor.execute("SELECT * FROM students")
    
    # 获取查询结果
    results = cursor.fetchall()
    
    # 显示表中的数据
    print("\nStudents table contents after deletion:")
    print("ID | Name       | Age")
    print("-" * 30)
    if results:
        for row in results:
            print(f"{row[0]}  | {row[1]:<10} | {row[2]}")
    else:
        print("The table is empty.")

    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

# 执行函数
if __name__ == "__main__":
    test()

结果
在这里插入图片描述

相关文章:

  • DeepSeek API keys本地调用 [python]
  • 【AI知识】在 PyTorch 中设计和实现一个完整的模型训练和优化流程
  • C语言 数据结构【动态顺序表】详解
  • 表格标题竖直
  • IP地址结构体与字符串转换函数详解
  • 基于RT-thread使用STM32F407驱动LCD屏幕
  • 【HCIA-晴天老师】15-VLAN的Hybrid配置笔记
  • Camera2 API拍照失败问题实录:从错误码到格式转换的排坑之旅
  • Python实现生产者消费者模型-多进程与多线程处理
  • 基于Redis分布锁+事务补偿解决数据不一致性问题
  • 大数据E10:基于Spark和Scala编程解决一些基本的数据处理和统计分析,去重、排序等
  • 论文阅读:2023 EMNLP SeqXGPT: Sentence-level AI-generated text detection
  • 盛铂科技国产SLMF315超低相位噪声频率综合器介绍
  • SpringBoot有几种获取Request对象的方法
  • 龙虎榜——20250321
  • 第五章 起航18 管理会议信息同步
  • 计算机操作系统(三) 操作系统的特性、运行环境与核心功能(附带图谱更好对比理解))
  • 游戏引擎学习第173天
  • JAVA————十五万字汇总
  • QPrintDialog弹出慢的问题
  • 专访|日本驻华大使金杉宪治:对美、对华外交必须在保持平衡的基础上稳步推进
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 巴西总统卢拉将访华
  • 沃旭能源因成本上升放弃英国海上风电项目,或损失近40亿元
  • 总奖池超百万!第五届七猫现实题材征文大赛颁奖在即
  • 海南省三亚市委原常委、秘书长黄兴武被“双开”