MySQL:三、Python操作MySQL

本文详细介绍如何使用Python的pymysql模块连接MySQL数据库,包括增删改查操作,并提供查询、增删改的具体代码实例,同时讲解了如何通过封装类简化数据库操作。

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

一、连接MySQL

  • 第1步:导入模块
    import pymysql

导入模块前要先安装模块:pip install pymysql

  • 第2步:连接数据库
import pymysql
con = pymysql.connect(host='localhost',port=3306,user='root',password='hzl2020',database='mydb2',charset='utf8')

简写为:
con = pymysql.connect('localhost','root','hzl2020','mydb2')

参数解释:
con:只是一个连接标识,可自定义;
host:标识主机或主机ip地址;
port:mysql端口号,默认为3306,可不填写;
user:用户名,和mysql一致;
password,mysql密码;
database:数据库名,要进入的数据库;
charset:编码格式。

  • 第3步:使用cursor()方法创建游标,用来执行SQL语句

语法:游标名称=数据库连接标识.cursor()

cur = con.cursor()

cur:游标名称,可自定义。

  • 第4步:用execute()方法执行SQL

语法:游标名. execute()

sql = 'select * from emp'
cur.execute(sql) 

sql语句为字符串格式,每句结尾不能使用分号“;”

  • 第5步:获取查询结果

语法:游标名. fetchall()

查询所有结果:
res = cursor.fetchall()
print(res)

获取查询结果的函数方法:
fetchall():获取所有结果
fetchone():获取单条结果,每次获取下一条数据
fetchmany(n):一次获取指定数量数据,返回一个元组

  • 第6步:关闭连接

先关闭游标,再关MySQL!

# 先关游标
cursor.close()
# 再关MySQL
con.close()

二、增删改操作

增删改命令差不多,只要将sql命令更换为对应操作的命令即可!

import pymysql
方式一:
db = pymysql.connect('localhost','root','hzl2020','mydb2')
cur = db.cursor()
# 插入数据
sql = 'insert into person(name, age) values("aa", 20)'
try:
    cursor.execute(sql)
    # 提交事务
    db.commit()
except Exception as e:
    print(e)
    # 回滚
    db.rollback()

cur.close()
db.close()

方式二:使用withas,会自动关闭游标。
db = pymysql.connect('localhost','root','hzl2020','mydb2')
with db.cursor() as cursor:
    # 一次操作一条
    sql:'insert into person(name, age) values("aa", 20)'
    cursor.execute(sql)
    db.commit()
    # 一次插入多条
    for i in range(11,21):
        stuid = str(2000 + i)
        stuname = 'luhan' + str(i)
        cursor.execute(f'insert into student values("{stuid}","{stuname}")')
    db.commit()
db.close()

三、查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据(每次获取下一条数据), 使用fetchall() 方法获取多条数据;使用fetchmany(n)获取指定数量的数据(每次获取下一多条数据)。

import pymysql
from pymysql.cursors import DictCursor  # 查询结果为字典

db = pymysql.connect('localhost','root','hzl2020','mydb2')
with db.cursor(cursor=DictCursor) as cursor:
    cursor.execute('select * from student')
    # 获取查询结果
    res = cursor.fetchall()     # 获取全部数据
    res = cursor.fetchone()       # 一次获取下一条数据
    res = cursor.fetchone()       # 一次获取下一条数据
    res = cursor.fetchmany(3)       # 一次获取指定数量数据,(('1001', 'zhangsan'), ('1002', 'xiaoming'), ('1003', 'jack'))
    print(res)
db.close()

四、编写SQL模块

import pymysql
from pymysql.cursors import DictCursor


class SQL:
    # 初始化,连接MySQL
    def __init__(self, host='localhost', user='root', password='', database='', port=3306):
        self.db = pymysql.connect(
                        host=host, port=port,
                        user=user, password=password,
                        database=database, autocommit=True
                  )

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

    # 查询: 查一条数据
    def get_one(self, sql):
        try:
            with self.db.cursor(cursor=DictCursor) as cur:
                cur.execute(sql)
                return cur.fetchone()
        except Exception as e:
            print("查询失败:", e)

    # 查询: 查多条数据
    def get_all(self, sql):
        try:
            with self.db.cursor(cursor=DictCursor) as cur:
                cur.execute(sql)
                return cur.fetchall()
        except Exception as e:
            print("查询失败:", e)

    # 增: 插入数据
    def insert(self, sql):
        return self.__edit(sql)

    # 删: 删除数据
    def delete(self, sql):
        return self.__edit(sql)

    # 改: 修改数据
    def update(self, sql):
        return self.__edit(sql)

    # 封装的修改方法:增删改操作
    def __edit(self, sql):
        count = 0
        try:
            with self.db.cursor() as cur:
                count = cur.execute(sql)
        except Exception as e:
            print("操作失败:", e)
            self.db.rollback()

        return count

说明:如果不希望每次SQL操作之后手动提交或回滚事务,可以像上面的代码那样,在创建连接的时候多加一个名为autocommit的参数并将它的值设置为True,表示每次执行SQL之后自动提交。如果程序中不需要使用事务环境也不希望手动的提交或回滚就可以这么做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值