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日

相关文章

  • 微信小程序云开发详细教程

    微信小程序云开发详细教程 什么是微信小程序云开发? 微信小程序云开发是一种基于微信开发的轻量级应用程序,它可以减少前后端交互的复杂度,简化开发流程,提高开发效率。 如何使用微信小程序云开发? 使用微信小程序云开发需要进行以下几个步骤: 注册微信开发者账号,并创建小程序 在小程序管理后台开启“云开发”功能 在小程序中使用云开发 调用云函数 操作云数据库 使用云…

    database 2023年5月21日
    00
  • MySQL字符集和校对规则详解

    MySQL字符集和校对规则是数据库中的重要概念,影响着数据库中数据的存储、排序以及比较等操作。本文将对MySQL字符集和校对规则进行详细解释,并提供相应的实例说明。 MySQL字符集 MySQL字符集是指数据库中的一组字符集合,决定了数据库中能够存储哪些字符以及如何存储这些字符。MySQL支持很多种不同的字符集,包括 ASCII、Latin-1、UTF-8 …

    MySQL 2023年3月10日
    00
  • Linux如何处理文件已删除但空间不释放的问题

    在Linux系统下,当我们删除一个文件时,实际上只是删除了文件的指针,并没有真正的将内容清除,因此磁盘空间并没有完全释放。这个问题也称为“空间泄漏”(space leak)或“空洞”(hole)问题。另外,当删除一个打开的文件时,虽然文件的链接被删除,文件本身仍在磁盘上,直到占用该文件的所有文件描述符都被关闭才会真正删除。 下面是处理文件已删除但空间不释放问…

    database 2023年5月22日
    00
  • Python基础之操作MySQL数据库

    下面我将为您详细讲解“Python基础之操作MySQL数据库”的完整攻略。 1. 安装必要的库 在Python中操作MySQL数据库需要使用pymysql库,因此我们需要首先安装该库。可以使用pip命令进行安装: pip install pymysql 2. 连接MySQL数据库 在使用pymysql库操作MySQL数据库前,需要先连接到MySQL数据库。可…

    database 2023年5月21日
    00
  • MySQL 4种导入数据的方法

    当我们需要将数据导入到MySQL数据库中时,有多种不同的方式可供选择,这里介绍MySQL常用的4种导入数据的方法。 1. 使用LOAD DATA INFILE命令导入数据 LOAD DATA INFILE是MySQL提供的导入数据的命令,适用于从本地磁盘导入大量数据。该命令使用起来非常简单,其基本语法如下: LOAD DATA INFILE ‘文件路径’ I…

    database 2023年5月19日
    00
  • SQL 创建分隔列表

    我们来详细讲解SQL如何创建分隔列表。创建分隔列表可以将多个值用某个分隔符隔开,例如将多个标签用逗号分隔开来。我们可以用如下的SQL代码实现: SELECT GROUP_CONCAT(tag_name SEPARATOR ‘, ‘) AS tags FROM tags; 上述代码中,我们首先使用了GROUP_CONCAT函数,这个函数可以将多个值合并成一个字…

    database 2023年3月27日
    00
  • 如何使用Python在数据库中添加一个新的列?

    以下是如何使用Python在数据库中添加一个新的列的完整使用攻略。 使用Python在数据库中添加一个新的列的前提条件 使用Python在数据库中添加一个新的列之前,需要确已经安装并启动了支持添加新列的数据库,例如MySQL或PostgreSQL且需要安装Python的相应数据库驱动程序,例如mysql-connector-python或psycopg2。 …

    python 2023年5月12日
    00
  • Redis源码环境构建过程详解

    下面我将为你详细讲解Redis源码环境构建过程的攻略。 准备工作 在开始Redis源码的环境构建之前,首先需要准备的工具有: 一台Linux服务器 GCC C编译器 Git CMake Tcl 下载Redis源码 通过Git命令,在Linux服务器上下载最新版本的Redis源码: $ git clone https://github.com/redis/re…

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