下面是完整攻略:
前言
在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技术站