python操作MySQL 模拟简单银行转账操作
发布时间 - 2026-01-11 03:26:26 点击率:次一、基础知识

1、MySQL-python的安装
下载,然后 pip install 安装包
2、python编写通用数据库程序的API规范
(1)、数据库连接对象 connection,建立python客户端与数据库的网络连接,创建方法为 MySQLdb.Connect(参数)
参数有六个: host(MySQL服务器地址,一般本地为127.0.0.1)
port(MySQL服务器端口号)
user(用户名)
passwd(密码)
db(数据库名称)
charset(连接编码)
connection的方法: cursor()使用该连接并返回游标
commit()提交当前事务
rollback()回滚当前事务
close()关闭连接
(2)、数据库游标对象cursor,用于执行查询和获取结果
方法:execute(op[,args])执行一个数据库查询 和 命令
fetchone()取得结果集的下一行
fetchmany(size)获取结果集的下几行
fetchall()获取结果集中剩下的所有行
rowcount 最近一次execute返回数据的行数或影响行数
close()关闭游标对象
connection与cursor:connection相当于python与MySQL之间的路,而cursor相当于路上的运输车来传送命令与结果。
3、简单命令:
select 查询数据:sql="select * from 表名 所查项目"
insert 插入数据:sql=“insert into 表名 所插项目”
update 更改数据: sql=“updata 表名 set 所改项目 ”
delete 删除数据: sql=“delete from 表名 所删项目”
where也是sql命令的关键存在,通常是 where 表头=列名 来定位那一列
4、事务
访问和更新数据库的一个程序执行单元,所执行的命令,都可以称为事务
具有原子性,一致性,隔离性,持久性
事务执行:
conn.commit() 正常结束事务
conn.rollback() 异常结束事务,对事务进行回滚,若程序执行单元中的连续的操作在进行中出错,之前的操作还原。
简单操作过程: 开始 → 创建connection →获取cursor → 程序执行单元 → 关闭cursor → 关闭connection → 结束
二、模拟银行转账系统代码
#coding=utf-8
import sys
import MySQLdb
'''''
python操作MySQL数据库,模拟银行转账
'''
class Trans_for_Money(object):
#初始化 类
def __init__(self,conn):
self.conn = conn
#### 1、检查所输入的账号是否存在 ####
def check_acct_available(self,source_acctid):
#使用与数据库的链接并返回游标
cursor=self.conn.cursor()
try:
#数据库命令
sql="select * from tr_money where acctid=%s" %source_acctid
#执行命令
cursor.execute(sql)
#为方便观察执行过程
print "check_acct_available:" + sql
#讲结果集放入变量result中,若result不等于1,则没有这个账号,输出异常
result=cursor.fetchall()
if len(result)!=1:
raise Exception("账号%s不存在" %source_acctid)
finally:
#若过程出现问题,仍需要关闭游标对象
cursor.close()
#### 2、检查减款人余额是否充足,方法与上一个函数一样,只是多加了一个money参数 ###
def has_enough_money(self,source_acctid,money):
cursor=self.conn.cursor()
try:
sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money)
cursor.execute(sql)
print "has_enough_money:" + sql
result=cursor.fetchall()
if len(result)!=1:
raise Exception("账号%s余额不足" %source_acctid)
finally:
cursor.close()
#### 3、减款操作 ###
def reduce_money(self,source_acctid,money):
cursor=self.conn.cursor()
try:
#数据库命令,减去对应减款人的金额数
sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid)
cursor.execute(sql)
print "reduce_money:" + sql
#操作的execute()数据行数不等于1则减款失败
if cursor.rowcount!=1:
raise Exception("账号%s减款失败" %source_acctid)
finally:
cursor.close()
#### 4、收款操作,与减款方法相同 ###
def add_money(self,target_acctid,money):
cursor=self.conn.cursor()
try:
sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid)
cursor.execute(sql)
print "add_money:" + sql
if cursor.rowcount!=1:
raise Exception("账号%s收款失败" %target_acctid)
finally:
cursor.close()
#### 5、分别传入参数,代入上方函数,执行操作 ###
def trans_for(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(target_acctid)
self.has_enough_money(source_acctid,money)
self.reduce_money(source_acctid,money)
self.add_money(target_acctid,money)
#提交当前事务
self.conn.commit()
except Exception as e:
#若出错,回滚当前事务
self.conn.rollback()
raise e
if __name__=="__main__":
# source_acctid=sys.argv[1]
# target_acctid=sys.argv[2]
# money=sys.argv[3]
#建立与数据库的链接
conn = MySQLdb.Connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='12345678',
db='tt',
charset='utf8'
)
#手动输入减款人、收款人、转款数
source_acctid=raw_input("请输入减款人: ")
target_acctid=raw_input("请输入收款人: ")
money=raw_input("请输入转款数: ")
#将参数传入类中
tr_money=Trans_for_Money(conn)
try:
tr_money.trans_for(source_acctid,target_acctid,money)
except Exception as e:
print"出现问题:"+str(e)
finally:
conn.close()
#关闭链接
三、问题解决
1、sys.argv[ ]
因为教学视频中用的IDE是MyEclipse,最后用run.Configuration 输入参数,而我用的是pycharm,表示笨的找不到还是其实它没有!
所以选择用raw_input() 在执行过程中输入参数
其实有去了解sys.argv[ ],但还是懂不太清楚。
2、 mysql_exceptions.IntegrityError: (1062, "Duplicate entry '7' for key 'PRIMARY'")
这个错误表示你所要插入的数据已经存在,最好去观察一下数据库的数据与自己的程序操作是否有矛盾
3、MySql 建表或输入数值时出错:1170-BLOB/TEXT column‘name'used in key specification without a key length
错误信息为BLOB或者TEXT字段使用了未指定键值长度的键
解决方法:设置其他为主键 或 将数据形式改为varchar
具体解释网址:http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/
4、TypeError: 'post' is an invalid keyword argument for this function
错误原因:TypeError: “post”是这个函数的无效参数
这个问题错的很无语,一时脑子进水把 “port”=3306 写成了“post”=‘3306'
5、1054, "Unknown column 'acctid' in 'where clause'
错误原因:在where子句中找不到“acctid”列
呵呵,上个错误脑子进的水没排出来,把表头写错了…………
6、另外,还有一个错误是手动输入的减款,收款人设为字母或汉字时找不到
可能是我代码或数据库建表时的设定问题,表示在字符转换和数据库这方面还是小白一枚,继续奋斗吧!
7、MySQL数据库的启动
计算机 → 右键 → 管理 → 服务和应用程序 → 服务 → 找到MySQL → 右键启动
四、具体执行显示
1、数据库 tr_money 表的初始状态
2、代码执行,输入减款人,收款人,转款数额
3、执行,结果出现代码中特意 print 的操作进程显示
4、数据库 tr_money 表执行后状态
总结
以上所述是小编给大家介绍的python 操作mysql 模拟银行转账,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# python
# 操作mysql
# 银行转账
# Python操作MySQL模拟银行转账
# python实现支付宝转账接口
# Python实现信用卡系统(支持购物、转账、存取钱)
# 基于Python实现一个简单的银行转账操作
# 用Python写一个模拟qq聊天小程序的代码实例
# python 模拟银行转账功能过程详解
# 请输入
# 找不到
# 右键
# 行数
# 不等于
# 小编
# 自己的
# 的是
# 子句
# 在此
# 不太
# 设为
# 这个问题
# 错了
# 我用
# 给大家
# 不存在
# 还有一个
# 一枚
# 上个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
linux写shell需要注意的问题(必看)
Laravel如何实现一对一模型关联?(Eloquent示例)
如何登录建站主机?访问步骤全解析
zabbix利用python脚本发送报警邮件的方法
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
如何快速搭建高效简练网站?
linux top下的 minerd 木马清除方法
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何快速搭建高效可靠的建站解决方案?
如何快速搭建安全的FTP站点?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
微信小程序 scroll-view组件实现列表页实例代码
Laravel如何实现数据库事务?(DB Facade示例)
如何用虚拟主机快速搭建网站?详细步骤解析
C#如何调用原生C++ COM对象详解
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
高防服务器租用首荐平台,企业级优惠套餐快速部署
Linux系统运维自动化项目教程_Ansible批量管理实战
千库网官网入口推荐 千库网设计创意平台入口
浅谈javascript alert和confirm的美化
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
js实现点击每个li节点,都弹出其文本值及修改
如何用IIS7快速搭建并优化网站站点?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
java获取注册ip实例
EditPlus中的正则表达式实战(6)
如何在IIS7中新建站点?详细步骤解析
LinuxShell函数封装方法_脚本复用设计思路【教程】
制作旅游网站html,怎样注册旅游网站?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
如何挑选高效建站主机与优质域名?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
如何用VPS主机快速搭建个人网站?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
如何确认建站备案号应放置的具体位置?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
JS碰撞运动实现方法详解
活动邀请函制作网站有哪些,活动邀请函文案?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何在云主机上快速搭建多站点网站?
lovemo网页版地址 lovemo官网手机登录
如何为不同团队 ID 动态生成多个“认领值班”按钮
无锡营销型网站制作公司,无锡网选车牌流程?
如何用y主机助手快速搭建网站?

