零基础学Python之整合MySQL

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。

DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。

Python DB-API使用流程:

  • 引入 API 模块。
  • 获取与数据库的连接。
  • 执行SQL语句和存储过程。
  • 关闭数据库连接。

Python中操作MySQL数据库有多种方法,例如使用mysql-connector-python、PyMySQL、mysqlclient等库。本文将以PyMySQL为例,介绍如何在Python中使用PyMySQL库进行MySQL数据库操作。

在Python中使用PyMySQL库进行MySQL数据库操作,需要先安装PyMySQL库。可以使用pip命令在命令行中安装PyMySQL库。

bash 复制代码
pip install pymysql

1.连接MySQL数据库

使用 connect() 方法连接到MySQL数据库。需要提供主机名、用户名、密码和数据库名。

python 复制代码
import pymysql

connection = pymysql.connect(
            host="47.93.159.97",
            port=3306,
            user="root",
            password="mysql8test.",
            db="user",
            charset="utf8mb4"
        )

2.SQL语句执行

使用 execute() 方法执行对应的SQL语句。

python 复制代码
import pymysql

# 获取到connection对象之后,编写sql调用execute()方法。
cursor = connection.cursor()
sql = "增删改查sql语句"
# 参数
date = ("元组类型",)
# 执行SQL
affect_row = cursor.execute(sql,date)

3.Python操作MySQL案例

了解完 connect()execute() 下面我们直接来一个案例演示下Python操作MySQL的增删改查。

需求:编写一个程序,操作数据库需要对人员进行增删改查。

(1)准备数据库表格user表

sql 复制代码
-- `user`.`user` definition

CREATE TABLE `user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `age` varchar(100) DEFAULT NULL COMMENT '年龄',
  `sex` varchar(100) DEFAULT NULL COMMENT '性别',
  `address` varchar(100) DEFAULT NULL COMMENT '地址',
  `career` varchar(100) DEFAULT NULL COMMENT '职业',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

(2)封装数据库的工具类

python 复制代码
import pymysql

'''
数据库操作工具类
'''

class DBUtil:

    # 创建连接对象
    @staticmethod
    def get_connection():
        connection = pymysql.connect(
            host="ip地址",
            port=3306,
            user="user",
            password="password",
            db="user",
            charset="utf8mb4"
        )
        return connection

    # 关闭连接对象
    @staticmethod
    def close(connection, cursor):
        # 更改提交
        connection.commit()
        # 关闭游标对象
        cursor.close()
        # 关闭连接对象
        connection.close()

(3)数据库增删改查方法编写

python 复制代码
from DBUtil import DBUtil

class UserDao:

    @staticmethod
    def __addUser__(name, age, sex, address, career):
        connection = DBUtil.get_connection()
        cursor = connection.cursor()
        sql = "insert into user (name,age,sex,address,career) values (%s,%s,%s,%s,%s)"
        data = [(name,age,sex,address,career)]
        affect_row = cursor.executemany(sql,data)
        print("受影响的行数:",affect_row)
        if affect_row > 0:
            print("添加成功")
        else:
            print("添加失败")
        DBUtil.close(connection,cursor)

    @staticmethod
    def __updateUser__(user_id, name, age, sex, address, career):
        connection = DBUtil.get_connection()
        cursor = connection.cursor()
        sql = "update user set name = %s,age = %s,sex=%s,address=%s,career=%s where id = %s"
        date = (name,age,sex,address,career,user_id)
        affect_row = cursor.execute(sql,date)
        if affect_row > 0:
            print("修改成功")
        else:
            print("修改失败,当前人员不存在")
        DBUtil.close(connection,cursor)

    @staticmethod
    def __deleteUser__(user_id):
        connection = DBUtil.get_connection()
        cursor = connection.cursor()
        sql = "delete from user where id =%s"
        affect_row = cursor.execute(sql, (user_id,))
        if affect_row > 0:
            print("删除成功")
        else:
            print("删除失败,当前人员不存在")
        DBUtil.close(connection, cursor)

    @staticmethod
    def __selectUsers__():
        connection = DBUtil.get_connection()
        cursor = connection.cursor()
        sql = "select * from user"
        cursor.execute(sql)
        rows = cursor.fetchall()
        for row in rows:
            print("编号:",row[0],"姓名:",row[1],"年龄:",row[2],"性别:",row[3],"地址:",row[4],"职业:",row[5])
        DBUtil.close(connection,cursor)

(4)主程序入口编写

python 复制代码
from UserDao import UserDao

def main():
    # 入口
    while True:
        print("[1]增加用户信息")
        print("[2]删除用户信息")
        print("[3]修改用户信息")
        print("[4]查询用户信息")
        print("[5]退出系统")
        choose = int(input("请输入你要执行的选项:"))
        if choose == 1:
            name = input("姓名:")
            age = input("年龄:")
            sex = input("性别:")
            address = input("地址:")
            career = input("职业:")
            UserDao.__addUser__(name, age, sex, address, career)
        elif choose == 2:
            user_id = input("用户ID:")
            UserDao.__deleteUser__(user_id)
        elif choose == 3:
            user_id = input("用户ID:")
            name = input("姓名:")
            age = input("年龄:")
            sex = input("性别:")
            address = input("地址:")
            career = input("职业:")
            UserDao.__updateUser__(user_id, name, age, sex, address, career)
        elif choose == 4:
            UserDao.__selectUsers__()
        else:
            print("退出系统")
            break

if __name__ == "__main__":
    main()

运行效果:


相关推荐
_.Switch19 分钟前
Python 自动化运维持续优化与性能调优
运维·开发语言·python·缓存·自动化·运维开发
伏虎山真人19 分钟前
开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
数据库·mysql·开源
J不A秃V头A25 分钟前
Python爬虫:获取国家货币编码、货币名称
开发语言·爬虫·python
SRC_BLUE_171 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
阿斯卡码2 小时前
jupyter添加、删除、查看内核
ide·python·jupyter
内核程序员kevin4 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
埃菲尔铁塔_CV算法4 小时前
图像算法之 OCR 识别算法:原理与应用场景
图像处理·python·计算机视觉
CodingBrother4 小时前
MySQL 中的 `IN`、`EXISTS` 区别与性能分析
数据库·mysql
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
封步宇AIGC5 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘