python操作MySQL模拟银行转账操作的简单实例
这篇文章主要介绍了python操作MySQL 模拟简单银行转账操作,需要的朋友可以参考下
一、基础知识
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 表执行后状态
总结
Atas ialah kandungan terperinci python操作MySQL模拟银行转账操作的简单实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apabila menggunakan crawler scapy, sebab mengapa fail penyimpanan berterusan paip tidak boleh ditulis? Perbincangan Ketika belajar menggunakan Crawler Scapy untuk Crawler Data, anda sering menemui ...

Proses Python Pool mengendalikan permintaan TCP serentak yang menyebabkan pelanggan terjebak. Apabila menggunakan Python untuk pengaturcaraan rangkaian, adalah penting untuk mengendalikan permintaan TCP serentak dengan cekap. …

Pilihan Perpustakaan Pembangunan Aplikasi Desktop Python Python Banyak pemaju Python ingin membangunkan aplikasi desktop yang boleh dijalankan pada kedua-dua sistem Windows dan Linux ...

Sangat meneroka kaedah tontonan python funcools.partial Object in Funcools.Partial Menggunakan Python ...

Bermula dengan Python: Lukisan Grafik Hourglass dan Pengesahan Input Artikel ini akan menyelesaikan masalah definisi berubah -ubah yang dihadapi oleh pemula python dalam program lukisan grafik Hourglass. Kod ...

Bagaimana untuk mengendalikan imej resolusi tinggi di Python untuk mencari kawasan putih? Memproses gambar resolusi tinggi 9000x7000 piksel, bagaimana untuk mencari dua gambar dengan tepat ...

Penukaran dan Statistik Data: Pemprosesan yang cekap bagi set data besar Artikel ini akan memperkenalkan secara terperinci bagaimana untuk menukar senarai data yang mengandungi maklumat produk kepada yang lain yang mengandungi ...

Analisis pembezaan hasil output Node.js, Python dan Go Decryption Algoritma Artikel ini akan menyediakan penyelesaian AES-128-ECB yang dilaksanakan dalam tiga bahasa pengaturcaraan yang berbeza (Node.js, Python, GO) ...
