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()提交事务;