python操作MySQL 模拟简单银行转账操作

下面是完整攻略:

前言

在Python应用的常见开发场景中,与数据库的交互是非常常见的。而在数据库中,MySQL是应用最广泛的一种关系型数据库之一。因此,学习Python操作MySQL是非常必要的一种技能。

本文中,将介绍如何使用Python操作MySQL,模拟简单银行转账操作的完整攻略。在此操作中,将可以学习到如何使用Python与MySQL进行连接、创建、删除、更新、查询等操作。

SQL语句

在Python程序中操作MySQL,一个最基本的知识点就是SQL语句。SQL(Structured Query Language) 是一个用于管理关系型数据库系统的语言。它允许用户使用特定的语法编写操作数据库的指令。

在此处,我们将使用以下SQL语句实现银行转账操作:

-- 创建账户表
CREATE TABLE IF NOT EXISTS `accounts` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(64) NOT NULL,
    `balance` decimal(10,2) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

-- 插入账户信息
INSERT INTO accounts (name, balance) VALUES 
    ('Alice', 1000.00), 
    ('Bob', 2000.00),
    ('Charlie', 3000.00),
    ('David', 4000.00);

以上SQL语句的意思是,首先创建一个“accounts”表格,里面包含了id、name、balance三个字段,每个账户记录都包含了一个唯一的id、账户名字、和账户余额。然后,向accounts表中插入了4条记录,分别对应Alice、Bob、Charlie和David这4个账户,每个账户初始余额分别为1000、2000、3000和4000。

安装PyMySQL

在Python中操作MySQL需要用到PyMySQL模块,因此安装PyMySQL是必须的。使用以下命令来安装:

pip install pymysql

连接数据库

import pymysql

def connect():
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='password',
        db='bank',
        port=3306,
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor
    )
    return conn

以上的代码实现了连接到MySQL数据库的功能。具体而言,connect()函数中,我们输入了MySQL数据库的主机名、用户名、密码、数据库名、端口号、字符编码和游标类型等参数。然后,用PyMySQL提供的connect()方法连接MySQL数据库,返回连接对象conn。

需要特别注意的是,为了支持中文等复杂字符集,我们使用了utf8mb4作为字符编码。

显示账户信息

def show_accounts():
    conn = connect()
    try:
        with conn.cursor() as cursor:
            sql = "SELECT * FROM accounts;"
            cursor.execute(sql)
            result = cursor.fetchall()
            for row in result:
                print("id=%d, name=%s, balance=%.2f" % (
                    row['id'], row['name'], row['balance']))
    finally:
        conn.close()

以上代码会显示accounts表中的所有记录,包括每个账户的id、账户名和账户余额。

在这里我们使用了fetchall()函数,它在一次操作中获取所有结果集中的记录。而 with ... as ...: 语句与 finally: 语句组合使用,会保证连接在执行完毕后关闭。

转账操作

def transfer(from_name, to_name, amount):
    conn = connect()
    try:
        with conn.cursor() as cursor:
            # 开启事务
            conn.begin()
            # 读取转账人信息
            from_sql = "SELECT * FROM accounts WHERE name=%s;"
            cursor.execute(from_sql, (from_name,))
            from_account = cursor.fetchone()
            # 读取收款人信息
            to_sql = "SELECT * FROM accounts WHERE name=%s;"
            cursor.execute(to_sql, (to_name,))
            to_account = cursor.fetchone()
            # 如果转账人和收款人都存在
            if from_account and to_account:
                # 如果余额足够
                if from_account['balance'] >= amount:
                    # 更新转账人余额
                    from_balance = from_account['balance'] - amount
                    from_update_sql = "UPDATE accounts SET balance=%s WHERE id=%s;"
                    cursor.execute(from_update_sql, (from_balance, from_account['id']))
                    # 更新收款人余额
                    to_balance = to_account['balance'] + amount
                    to_update_sql = "UPDATE accounts SET balance=%s WHERE id=%s;"
                    cursor.execute(to_update_sql, (to_balance, to_account['id']))
                    # 提交事务
                    conn.commit()
                    print("Transfer %s from [%s] to [%s] succeed!" % (amount, from_name, to_name))
                else:
                    print("[%s] balance not enough to transfer %d" % (from_name, amount))
            else:
                print("From account [%s] or To account [%s] not exist!" % (from_name, to_name))
    finally:
        conn.close()

以上代码实现了银行转账的操作。在此处,我们使用了SELECT和UPDATE操作。

SELECT操作用于查询数据库中的记录集,而UPDATE操作则用于更新数据库中的记录集。事务开启后,先通过查询出转账人和收款人的账户信息,然后从转账余额中减去相应的转账数目,再将余额加入到收款人的账户中,最后提交事务。

需要注意的是,转账操作可能失败,因此我们在代码中使用了try-finally语句,确保连接在程序执行完毕后关闭。

示例

以下是模拟简单银行转账操作的两个示例:

示例1:Alice向Bob转账100元

transfer('Alice', 'Bob', 100)

输出结果:

Transfer 100 from [Alice] to [Bob] succeed!

示例2:Bob向Carl转账500元,但是Bob只有300元

transfer('Bob', 'Carl', 500)

输出结果:

[Bob] balance not enough to transfer 500

以上就是对“Python操作MySQL 模拟简单银行转账操作”的完整攻略了。希望通过这篇文章,您可以了解到如何使用Python与MySQL进行连接、创建、删除、更新、查询等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python操作MySQL 模拟简单银行转账操作 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Linux 下如何检查内存使用率

    当我们的Linux系统运行一段时间后,常常需要定期检查当前的内存使用情况,以便及时发现并排查可能存在的内存泄漏等问题。那么在Linux下如何检查内存使用率呢?下面我将提供一个完整的攻略: 1. 使用 free 命令 free 命令是一个常用的检查内存使用率的工具,它能够输出当前系统的内存统计信息。使用 free 命令最基础的用法是 free -m 命令,可以…

    database 2023年5月22日
    00
  • Ubuntu下完美实现迁移MySQL数据库位置

    下面是Ubuntu下完美实现迁移MySQL数据库位置的完整攻略: 1. 备份 MySQL 数据库 在进行迁移之前,务必要先备份 MySQL 数据库,以防数据遗失。可使用以下命令来备份数据库: mysqldump -u root -p –databases dbname > database.sql 其中,root 是数据库的用户名,dbname 是需…

    database 2023年5月22日
    00
  • SQL server数据库查询语句使用方法详细讲解

    SQL Server数据库查询语句使用方法详细讲解 对于处理数据的操作,如查找、插入、更新和删除,SQL(Server)是一个非常有用和广泛使用的工具。在本文中,我们将详细介绍SQL Server数据库查询语句的使用方法,让你更好地了解这个强大的工具。 连接数据库 使用SQL Server之前,需要先连接到要操作的数据库。可以通过以下步骤连接SQL Serv…

    database 2023年5月21日
    00
  • Python接口测试数据库封装实现原理

    下面我将详细讲解“Python接口测试数据库封装实现原理”的完整攻略。 什么是数据库封装 数据库封装是指将常用数据库操作封装成函数或类,达到简化开发、增强可读性、提高代码复用性等目的的技术。 数据库封装的优缺点 优点 简化开发:使用封装后的函数或类,开发人员不用编写繁琐的数据库操作代码,大大降低开发难度。 提高可读性:封装后的函数或类,名称语义化,使用方便直…

    database 2023年5月22日
    00
  • 浅析redis缓存 在spring中的配置 及其简单的使用

    一:如果你需要在你的本地项目中配置redis。那么你首先得需要在你的本地安装redis 参考链接【http://www.runoob.com/redis/redis-install.html】 下载redis在网上有很多 我这里就不多做解释了 下载以后 找到这样的三个文件  这是我们需要操作的 每个版本可能不一样 但这几个肯定是有的 然后 安装这个http:…

    Redis 2023年4月13日
    00
  • 从redis数据库取数据存放到本地mysql数据库

    redis数据库属于非关系型数据库,数据存放在内存堆栈中,效率比较高。 其存储数据是以json格式字符串存储字典的,而类似的关系型数据库无法实现这种数据的存储。 在爬取数据时,将数据暂存到redis中,等数据采集完成后,在从redis里将数据读取,并写入mysql数据库中。 在数据采集方面不在多说,只需将项目settings文件下的pipelines管道文件…

    Redis 2023年4月13日
    00
  • 详解MySQL比较运算符

    MySQL 中的比较运算符主要包括: 等于运算符:= 用于比较两个值是否相等,如果相等则返回 TRUE,否则返回 FALSE。 例: SELECT * FROM students WHERE name = '张三'; 不等于运算符:<> 用于比较两个值是否不相等,如果不相等则返回 TRUE,否则返回 FALSE。 例: SEL…

    MySQL 2023年3月9日
    00
  • 解析Mysql备份与恢复简单总结与tee命令的使用介绍

    下面是对“解析Mysql备份与恢复简单总结与tee命令的使用介绍”的详细讲解: 解析Mysql备份与恢复简单总结 Mysql备份 对于Mysql备份,我们可以采用两种方式进行备份,分别是逻辑备份和物理备份。 逻辑备份 逻辑备份指的是将数据库中的数据以INSERT语句的形式进行备份。逻辑备份不仅可以进行数据的备份,还可以进行数据的转储和传输,因此备份后的文件比…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部