← 返回首页
Python3基础教程(七十)
发表时间:2022-05-03 11:21:22
访问MySQL

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

1.安装PyMySQL

在终端里输入以下命令:

pip3 install pymysql

2.实例

连接test数据库并查询students表里的所有记录。

# -*- coding: utf-8 -*-
# @Time : 2022/5/5 16:20
# @File : mysqldemo.py
# @Software : PyCharm

# 打开数据库连接

import pymysql

db = pymysql.connect(host="localhost", user="root", passwd="root", db="test", charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询
sql = "select * from students"

try:
    '''执行sql语句'''
    cursor.execute(sql)
    '''获取数据表中的value值'''
    results = cursor.fetchall()
    for row in results:
        sid = row[0]
        sname = row[1]
        gender = row[2]
        major = row[3]
        # 打印结果
        print("学号是{},姓名是{},性别是{},专业是{}".format(sid, sname, gender, major))
except:
    '''如果发生错误则回滚并输出提示语句'''
    print("查询失败")

运行结果:

学号是S0001,姓名是张三丰,性别是男,专业是太极拳
学号是S0002,姓名是刘备,性别是男,专业是软件工程
学号是S0003,姓名是关羽,性别是男,专业是软件工程
学号是S0004,姓名是张飞,性别是男,专业是软件工程

2.DDL语句创建表

import pymysql


'''连接数据库并执行操作:用try except捕获异常。'''
try:
    '''打开数据库连接,实现连接数据库'''
    db = pymysql.connect(
        host='localhost',
        user='root',
        password='root',
        database='test',
        charset='utf8mb4'
    )
    '''声明一个游标'''
    cursor = db.cursor()
    #使用execute()方法来为数据库创建表
    '''创建表之前先检查是否存在,如果存在则删除'''
    cursor.execute("DROP TABLE IF EXISTS users")
    '''编辑sql语句'''
    sql = """CREATE TABLE users (
              uid int not null auto_increment primary key,
              username  varchar(20),
              password  varchar(20) )
             """
    '''执行sql语句'''
    cursor.execute(sql)
    print("创建表成功!")
except:
    print("创建表失败!")

3.DML语句插入数据

# 打开数据库连接

import pymysql

# 打开数据库连接,实现连接数据库
db = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='test',
    charset='utf8mb4'
)
# 用cursor()方法获取操作游标
cursor = db.cursor()
# 编辑sql语句
sql = "INSERT INTO users(username,password)VALUES ('lisi', '123456')"
# 执行操作:用try except捕获异常。
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
    print("成功插入用户信息!")
except:
    # 如果发生错误则回滚并输出提示语句
    db.rollback()
    print("插入用户信息失败,请检查代码!!")

4.一个完整的CRUD案例

moudule/users.py


# 自定义了一个用户类
class Users(object):
    def __init__(self, uid, username, password):
        self.uid = uid
        self.username = username
        self.password = password

    def __str__(self):
        return "用户编号:%d,用户名:%s,密码:%s" % (self.uid, self.username, self.password)

cruddemo.py


import pymysql
from moudule.users import Users

# 获得MySQL的数据库连接。

db = pymysql.connect(host="localhost", user="root", passwd="root", db="test", charset='utf8mb4')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 执行DDL语句
def execute_ddl():
    '''编辑sql语句'''
    sql = """CREATE TABLE users (
                  uid int not null auto_increment primary key,
                  username  varchar(20),
                  password  varchar(20) )
                 """
    '''执行sql语句'''
    cursor.execute(sql)
    print("创建表成功!")

# 执行插入语句 (insert)
def execute_insert(user):
    sql = "insert into users (username,password) values ('%s','%s');" % (user.username, user.password)
    '''执行sql语句'''
    cursor.execute(sql)
    # 注意:这里必须要提交事务
    db.commit()
    print("插入用户资料成功!")

# 执行批量新增用户
def execute_batch(user_list):
    try:
        for user in user_list:
            execute_insert(user)

        print('批量新增用户资料成功')
    except:
        '''如果发生错误则回滚并输出提示语句'''
        print("批量新增用户资料失败")

# 执行查询语句(查询单个用户)
def execute_query(uid):
    sql = 'select * from users where uid = %d;' % (uid)

    '''执行sql语句'''
    try:
        '''执行sql语句'''
        cursor.execute(sql)
        '''获取数据表中的value值'''
        results = cursor.fetchall()
        for row in results:
            uid = row[0]
            username = row[1]
            password = row[2]
            user = Users(uid, username, password)
            # 打印结果
            # print("用户编号是{},用户名是{},密码是{}".format(uid, username, password))
        return user
    except:
        '''如果发生错误则回滚并输出提示语句'''
        print("用户资料查询失败")

# 执行查询语句(查询所有用户)
def execute_queryAll():
    sql = 'select * from users;'

    '''执行sql语句'''
    try:
        '''执行sql语句'''
        cursor.execute(sql)
        '''获取数据表中的value值'''
        results = cursor.fetchall()
        for row in results:
            uid = row[0]
            username = row[1]
            password = row[2]
            # 打印结果
            print("用户编号是{},用户名是{},密码是{}".format(uid, username, password))
    except:
        '''如果发生错误则回滚并输出提示语句'''
        print("用户资料查询失败")

#更新用户资料
def execute_update(user):
    sql = "update users set username= '%s', password='%s' where uid=%d " % (user.username, user.password, user.uid)

    '''执行sql语句'''
    cursor.execute(sql)
    # 注意:这里必须要提交事务
    db.commit()
    print("更新用户资料成功!")

#删除用户资料
def execute_remove(uid):
    sql = "delete from users where uid = %d ;" % (uid)
    '''执行sql语句'''
    cursor.execute(sql)
    # 注意:这里必须要提交事务
    db.commit()
    print("删除用户资料成功!")


if __name__ == '__main__':
    # user = Users(100, 'admin', '123456')
    '''
    user_list = []  # 定义一个用户集合
    user_list.append(Users(101, '刘备', '123456'))
    user_list.append(Users(102, '曹操', '111111'))
    user_list.append(Users(103, '关羽', '222222'))
    user_list.append(Users(104, '赵云', '333333'))
    '''
    # print(user)

    # execute_ddl()
    # execute_insert(user)
    # execute_query(3)
    # execute_queryAll()

    # execute_batch(user_list)

    '''
    user = execute_query(9)
    print(user)
    user.password = '666666'
    execute_update(user)
    '''

    execute_remove(5)

小结: Python3 使用PyMySQL连接MySQL数据库,并能轻松实现增删改查。 执行完DML等操作语句后,要调用commit()提交事务;