2025-03-05
编程
00
请注意,本文编写于 54 天前,最后修改于 54 天前,其中某些信息可能已经过时。

目录

安装
基本使用
1. 连接到 MySQL 数据库
2. 创建表
3. 插入数据
4. 查询数据
5. 更新数据
6. 删除数据
7. 使用上下文管理器
8. 错误处理
使用实例

PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,它允许你通过 Python 脚本连接到 MySQL 数据库并执行 SQL 查询。

相比于其他数据库驱动程序,PyMySQL 的主要优点是它不需要安装额外的系统依赖项,并且完全用 Python 编写。

安装

首先,你需要安装 PyMySQL 包。可以通过 pip 来安装:

bash
pip install pymysql

基本使用

以下展示了如何使用 PyMySQL 进行基本的数据库操作,如连接到数据库、执行查询、插入数据等。

1. 连接到 MySQL 数据库

要连接到 MySQL 数据库,可以使用 pymysql.connect() 方法:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor # 返回结果为字典形式 ) try: with connection.cursor() as cursor: # 执行 SQL 查询 sql = "SELECT DATABASE();" cursor.execute(sql) result = cursor.fetchone() print(f"当前数据库: {result}") finally: # 关闭数据库连接 connection.close()

2. 创建表

你可以通过执行 SQL 语句来创建表:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: with connection.cursor() as cursor: # 创建表 sql = ''' CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL ); ''' cursor.execute(sql) # 提交更改 connection.commit() finally: # 关闭数据库连接 connection.close()

3. 插入数据

使用 INSERT INTO 语句将数据插入到表中:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: with connection.cursor() as cursor: # 插入数据 sql = "INSERT INTO users (name, age) VALUES (%s, %s)" cursor.execute(sql, ('Alice', 30)) # 提交更改 connection.commit() finally: # 关闭数据库连接 connection.close()

4. 查询数据

使用 SELECT 语句从表中检索数据:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: with connection.cursor() as cursor: # 查询数据 sql = "SELECT id, name, age FROM users" cursor.execute(sql) results = cursor.fetchall() for row in results: print(f"ID: {row['id']}, Name: {row['name']}, Age: {row['age']}") finally: # 关闭数据库连接 connection.close()

5. 更新数据

使用 UPDATE 语句更新表中的数据:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: with connection.cursor() as cursor: # 更新数据 sql = "UPDATE users SET age = %s WHERE name = %s" cursor.execute(sql, (31, 'Alice')) # 提交更改 connection.commit() finally: # 关闭数据库连接 connection.close()

6. 删除数据

使用 DELETE 语句删除表中的数据:

python
import pymysql # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) try: with connection.cursor() as cursor: # 删除数据 sql = "DELETE FROM users WHERE name = %s" cursor.execute(sql, ('Alice',)) # 提交更改 connection.commit() finally: # 关闭数据库连接 connection.close()

7. 使用上下文管理器

为了确保资源被正确释放,你可以使用上下文管理器来处理数据库连接:

python
import pymysql with pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) as connection: with connection.cursor() as cursor: # 执行 SQL 查询 sql = "SELECT DATABASE();" cursor.execute(sql) result = cursor.fetchone() print(f"当前数据库: {result}")

8. 错误处理

在实际应用中,数据库操作可能会失败,因此需要进行适当的错误处理:

python
import pymysql try: # 创建数据库连接 connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) with connection.cursor() as cursor: # 执行 SQL 查询 sql = "SELECT * FROM non_existent_table" cursor.execute(sql) results = cursor.fetchall() for row in results: print(row) except pymysql.MySQLError as e: print(f"MySQL 错误: {e}") except Exception as e: print(f"其他错误: {e}") finally: # 确保连接被关闭 if 'connection' in locals(): connection.close()

使用实例

新建一个文件mysqlclient.py用来配置mysql配置

#!/usr/bin/env python # -*- coding: UTF-8 -*- import pymysql conn = pymysql.connect( host="127.0.0.1", port=3306, user="用户", password="密码", db="data" )

在使用的py文件引入mysqlclient,并使用

#!/usr/bin/env python # -*- coding: UTF-8 -*- from mysql.mysqlclient import conn cur = conn.cursor() #查询操作(不需要try except) def select_mysql(username, password): sql = "SELECT * FROM app01_userinfo WHERE name ='%s' and password ='%s'" % (username, password) cur.execute(sql) result = cur.fetchall() if (len(result) == 0): return False#不存在 else: return result#存在 #插入操作 def insert_mysql(username, password,isadmin): sql = "INSERT INTO app01_userinfo(name, password,isadmin) VALUES ('%s','%s','%s')" %(username, password, isadmin) try: addflag = cur.execute(sql) conn.commit()# 对数据库内容有改变,需要commit() if (addflag == 1): return 1 #注册成功 else: return 0 #注册失败 except: print("系统错误...注册失败!") return 0 #更新操作 def updata_mysql(username,oldpassword,newpassword): sql2 = "update app01_userinfo set name='%s',password='%s' where password='%s'"%(username, newpassword, oldpassword) try: resetflag = cur.execute(sql2) conn.commit() if (resetflag == 1): return 1 else: return 0 except: print("系统错误...修改密码失败!") return 0 #删除操作 def del_mysql(username, password): sql = "Delete FROM app01_userinfo WHERE name ='%s' and password ='%s'" % (username, password) try: addflag = cur.execute(sql) conn.commit() if (addflag == 1): return 1 else: return 0 except: print("系统错误...添加密码失败!") return 0