Python 连接 MySQL 数据库基础操作与银行管理系统实战
Python 使用 PyMySQL 库连接 MySQL 数据库,涵盖环境配置、连接建立、游标操作及增删改查流程。通过银行管理系统案例,演示了账户登录验证、余额查询、存款取款等核心功能的实现逻辑。重点讲解了字符类型 char 与 varchar 的区别,事务提交 commit 的重要性,以及异常处理机制。内容包含完整的代码示例与最佳实践建议,适合初学者掌握 Python 数据库交互技术。
Python 使用 PyMySQL 库连接 MySQL 数据库,涵盖环境配置、连接建立、游标操作及增删改查流程。通过银行管理系统案例,演示了账户登录验证、余额查询、存款取款等核心功能的实现逻辑。重点讲解了字符类型 char 与 varchar 的区别,事务提交 commit 的重要性,以及异常处理机制。内容包含完整的代码示例与最佳实践建议,适合初学者掌握 Python 数据库交互技术。
本文详细介绍如何使用 Python 的 PyMySQL 库连接 MySQL 数据库,涵盖环境配置、连接建立、游标操作及增删改查流程。并通过一个完整的银行管理系统项目示例,演示账户登录验证、余额查询、存款取款等核心功能的实现逻辑。
在使用 PyMySQL 之前,需要确保已安装 Python 环境,并通过 pip 安装对应的驱动包。
pip install pymysql
首先需要引入 pymysql 模块,建立与服务器的连接。连接成功后,创建一个游标对象(Cursor)来执行 SQL 语句。
import pymysql
# 连接数据库
# host: 主机地址,user: 用户名,password: 密码,charset: 字符集
db = pymysql.connect(
host='localhost',
user='root',
password='1234',
charset='utf8'
)
# 创建一个游标对象(相当于指针)
cursor = db.cursor()
# 执行创建数据库语句
cursor.execute('create schema wzg default charset=utf8;')
cursor.execute('show databases;')
# fetchone 获取一条数据(元组类型)
print(cursor.fetchone())
# fetchall 获取全部数据(字符串类型)
all_data = cursor.fetchall()
for i in all_data:
print(i[0])
# 关闭游标和数据库连接
cursor.close()
db.close()
在选定数据库中创建表结构,并使用 try-except-finally 块处理异常,确保资源释放。
import pymysql
# 连接数据库,并打开 wzg 数据库
db = pymysql.connect(
host='localhost',
user='root',
password='1234',
charset='utf8',
db='wzg'
)
cursor = db.cursor()
try:
# 创建 student 表
sql = '''create table student(
SNO char(10),
SNAME varchar(20) NOT NULL,
SSEX varchar(1),
primary key(SNO)
) default charset=utf8;'''
cursor.execute(sql)
# 插入一条数据
insert_sql = '''
insert into student values('200303016','王智刚','男'),('20030001','小明','男')
'''
cursor.execute(insert_sql)
# 将数据提交给数据库(增删改操作必须先提交)
db.commit()
# 执行查询语句
cursor.execute('select * from student')
# 打印全部数据
all_data = cursor.fetchall()
for i in all_data:
print(i)
except Exception as e:
print(f"发生错误:{e}")
db.rollback() # 发生错误回滚事务
finally:
cursor.close()
db.close()
char(10),实际占用 10 个字节(包含填充的空字符)。适合存储长度固定的数据,如身份证号、手机号。varchar(10),只占 3 个字节 + 1 个长度标记字节。10 是最大值。适合存储长度不确定的文本。本案例模拟一个简单的银行系统,实现以下功能:
创建数据库 bank,并在其中创建账户表 account。
| 字段名 | 类型 | 说明 |
|---|---|---|
| account_id | varchar(20) | 账号 ID |
| account_passwd | char(6) | 密码 |
| money | decimal(10,2) | 余额 |
预置数据:
import pymysql
from decimal import Decimal
# 全局变量用于存储当前登录用户信息
current_user = None
def connect_db():
"""建立数据库连接"""
try:
db = pymysql.connect(
host='localhost',
user='root',
password='1234',
charset='utf8',
database='bank'
)
return db
except Exception as e:
print(f"连接失败:{e}")
return None
def login(db):
"""用户登录验证"""
global current_user
z = input("请输入账号:")
m = input("请输入密码:")
if not z or not m:
print("输入不能为空")
return False
try:
cursor = db.cursor()
# 使用参数化查询防止 SQL 注入
sql = 'select * from account where account_id=%s and account_passwd=%s'
cursor.execute(sql, (z, m))
result = cursor.fetchone()
if result:
print("登录成功")
current_user = {'id': result[0], 'money': result[]}
:
()
Exception e:
()
():
current_user:
()
:
cursor = db.cursor()
sql =
cursor.execute(sql, (current_user[],))
res = cursor.fetchone()
res:
()
Exception e:
()
():
current_user:
()
:
amount = (())
amount <= :
()
cursor = db.cursor()
new_money = current_user[] + amount
sql =
cursor.execute(sql, (new_money, current_user[]))
db.commit()
current_user[] = new_money
()
Exception e:
()
db.rollback()
():
current_user:
()
:
amount = (())
amount <= :
()
amount > current_user[]:
()
cursor = db.cursor()
new_money = current_user[] - amount
sql =
cursor.execute(sql, (new_money, current_user[]))
db.commit()
current_user[] = new_money
()
Exception e:
()
db.rollback()
():
db = connect_db()
db:
:
()
()
()
()
()
()
choice = ()
choice == :
login(db):
choice == :
query_balance(db)
choice == :
deposit(db)
choice == :
withdraw(db)
choice == :
()
:
()
:
db.close()
__name__ == :
main()
%s),避免直接拼接字符串。rollback)。with 语句) 自动管理连接和游标的关闭。通过上述示例,您可以掌握 Python 操作 MySQL 的核心流程,并能在此基础上扩展更复杂的企业级应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online