跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonPay

Python 连接 MySQL 数据库基础操作与银行管理系统实战

Python 使用 PyMySQL 库连接 MySQL 数据库,涵盖环境配置、连接建立、游标操作及增删改查流程。通过银行管理系统案例,演示了账户登录验证、余额查询、存款取款等核心功能的实现逻辑。重点讲解了字符类型 char 与 varchar 的区别,事务提交 commit 的重要性,以及异常处理机制。内容包含完整的代码示例与最佳实践建议,适合初学者掌握 Python 数据库交互技术。

1739658202发布于 2025/2/6更新于 2026/7/2348 浏览
Python 连接 MySQL 数据库基础操作与银行管理系统实战

Python 连接 MySQL 数据库基础操作与银行管理系统实战

本文详细介绍如何使用 Python 的 PyMySQL 库连接 MySQL 数据库,涵盖环境配置、连接建立、游标操作及增删改查流程。并通过一个完整的银行管理系统项目示例,演示账户登录验证、余额查询、存款取款等核心功能的实现逻辑。

一、环境准备与安装

在使用 PyMySQL 之前,需要确保已安装 Python 环境,并通过 pip 安装对应的驱动包。

pip install pymysql

二、数据库基础用法

1. 连接数据库与创建库

首先需要引入 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()

2. 创建表并插入数据

在选定数据库中创建表结构,并使用 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 = 
    cursor.execute(insert_sql)

    
    db.commit()

    
    cursor.execute()

    
    all_data = cursor.fetchall()
     i  all_data:
        (i)

 Exception  e:
    ()
    db.rollback()  

:
    cursor.close()
    db.close()
# 插入一条数据
''' insert into student values('200303016','王智刚','男'),('20030001','小明','男') '''
# 将数据提交给数据库(增删改操作必须先提交)
# 执行查询语句
'select * from student'
# 打印全部数据
for
in
print
except
as
print
f"发生错误:{e}"
# 发生错误回滚事务
finally

3. 数据类型说明:char 与 varchar

  • char(n):长度固定。例如存储 'abc',使用 char(10),实际占用 10 个字节(包含填充的空字符)。适合存储长度固定的数据,如身份证号、手机号。
  • varchar(n):长度可变。例如存储 'abc',使用 varchar(10),只占 3 个字节 + 1 个长度标记字节。10 是最大值。适合存储长度不确定的文本。

三、项目实战:银行管理系统

本案例模拟一个简单的银行系统,实现以下功能:

  1. 用户登录(账号密码匹配)
  2. 余额查询
  3. 存款
  4. 取款
  5. 退出系统

1. 数据库设计

创建数据库 bank,并在其中创建账户表 account。

字段名类型说明
account_idvarchar(20)账号 ID
account_passwdchar(6)密码
moneydecimal(10,2)余额

预置数据:

  • 001 | 123456 | 1000.00
  • 002 | 456789 | 5000.00

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[2]}
            return True
        else:
            print("登录失败")
            return False
    except Exception as e:
        print(f"登录过程出错:{e}")
        return False

def query_balance(db):
    """查询余额"""
    if not current_user:
        print("请先登录")
        return
    
    try:
        cursor = db.cursor()
        sql = 'select money from account where account_id=%s'
        cursor.execute(sql, (current_user['id'],))
        res = cursor.fetchone()
        if res:
            print(f"当前余额:{res[0]}")
    except Exception as e:
        print(f"查询失败:{e}")

def deposit(db):
    """存款"""
    if not current_user:
        print("请先登录")
        return
    
    try:
        amount = float(input("请输入存款金额:"))
        if amount <= 0:
            print("金额必须大于 0")
            return

        cursor = db.cursor()
        new_money = current_user['money'] + amount
        sql = 'update account set money=%s where account_id=%s'
        cursor.execute(sql, (new_money, current_user['id']))
        db.commit()
        current_user['money'] = new_money
        print("存款成功")
    except Exception as e:
        print(f"存款失败:{e}")
        db.rollback()

def withdraw(db):
    """取款"""
    if not current_user:
        print("请先登录")
        return
    
    try:
        amount = float(input("请输入取款金额:"))
        if amount <= 0:
            print("金额必须大于 0")
            return
        if amount > current_user['money']:
            print("余额不足")
            return

        cursor = db.cursor()
        new_money = current_user['money'] - amount
        sql = 'update account set money=%s where account_id=%s'
        cursor.execute(sql, (new_money, current_user['id']))
        db.commit()
        current_user['money'] = new_money
        print("取款成功")
    except Exception as e:
        print(f"取款失败:{e}")
        db.rollback()

def main():
    """主程序入口"""
    db = connect_db()
    if not db:
        return

    while True:
        print("\n=== 银行管理系统 ===")
        print("1. 登录")
        print("2. 查询余额")
        print("3. 存款")
        print("4. 取款")
        print("5. 退出")
        choice = input("请选择功能:")

        if choice == '1':
            if login(db):
                continue
        elif choice == '2':
            query_balance(db)
        elif choice == '3':
            deposit(db)
        elif choice == '4':
            withdraw(db)
        elif choice == '5':
            print("感谢使用,再见!")
            break
        else:
            print("无效选择")

    finally:
        db.close()

if __name__ == '__main__':
    main()

四、最佳实践建议

  1. 安全性:生产环境中不要硬编码密码,建议使用环境变量或配置文件管理敏感信息。
  2. SQL 注入:始终使用参数化查询(如 %s),避免直接拼接字符串。
  3. 事务控制:涉及资金变动的操作(存/取)必须开启事务,并在异常时回滚 (rollback)。
  4. 资源管理:尽量使用上下文管理器 (with 语句) 自动管理连接和游标的关闭。
  5. 异常处理:捕获具体异常类型,避免吞掉所有错误信息,便于调试。

通过上述示例,您可以掌握 Python 操作 MySQL 的核心流程,并能在此基础上扩展更复杂的企业级应用。

目录

  1. Python 连接 MySQL 数据库基础操作与银行管理系统实战
  2. 一、环境准备与安装
  3. 二、数据库基础用法
  4. 1. 连接数据库与创建库
  5. 连接数据库
  6. host: 主机地址,user: 用户名,password: 密码,charset: 字符集
  7. 创建一个游标对象(相当于指针)
  8. 执行创建数据库语句
  9. fetchone 获取一条数据(元组类型)
  10. fetchall 获取全部数据(字符串类型)
  11. 关闭游标和数据库连接
  12. 2. 创建表并插入数据
  13. 连接数据库,并打开 wzg 数据库
  14. 3. 数据类型说明:char 与 varchar
  15. 三、项目实战:银行管理系统
  16. 1. 数据库设计
  17. 2. 完整代码实现
  18. 全局变量用于存储当前登录用户信息
  19. 四、最佳实践建议
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Spring Cloud Alibaba 2026 微服务实战指南
  • Spring AOP 核心原理与实战指南
  • AI 时代,鸿蒙 App 还需要传统导航结构吗?
  • GitHub Copilot 学生会员认证指南
  • Qwen3-4B-Instruct 模型快速部署与 AI 写作应用指南
  • Cursor、Windsurf、Kiro、Zed、VS Code 等 AI 编程工具定价对比
  • OpenClaw 与本地千问模型搭建电脑 AI 助理
  • 美团龙猫大模型 LongCat-Flash-Chat 快速入门指南
  • Fast-GitHub GitHub 访问加速插件安装与配置指南
  • 华为 HCIP-AI Solution Architect 核心技术考点与解析
  • Java 连接电科金仓数据库(KingbaseES)实战指南
  • MCP Server 商店:AI 即插即用与工具自动化实战
  • Windows 环境下 OpenClaw AI 智能体本地部署指南
  • Transformer、Stable Diffusion 与 LLM 模型对比及实现
  • Python 学习建议:克服三分钟热度的实践路径
  • 政务热线智能分拨助手工作流的导出与导入实践
  • Java 项目全局配置规则 (Always Apply)
  • Open WebUI MCPo 技术解析:集成 MCP 工具与 Ollama 部署指南
  • OpenClaw 本地部署与飞书机器人接入教程
  • FunASR 离线文件转写服务开发与部署实战

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online