银行转账demo
思路:
- 首先要有一个表,存储转账人id和钱数,收款人的id和钱数。建表参考文章末尾创建数据表,并插入数据的代码。
- 验证两人是否存在,验证出款热年钱数是否大于转账钱数,最后一人出款,一人收款。
- 因此代码分为两大部分,主函数和类。类里边又包含各操作方法,和所有方法的调用执行。
知识点:
- python 操作数据库,要安装一个Python和数据库交互的包MySQL-python,然后我们就可以使用MySQLdb这个包进行数据库操作了。
- cursor() – 获取操作游标
- execute(self, nameid, money) – 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
- fetchall() – 返回查询到的所有记录
- rollback() – 回滚当前游标的所有操作,即当做什么也没发生
- 关闭数据库连接 , 需要分别的关闭指针对象和连接对象.
() 、() - 在执行完插入或删除或修改操作后,需要调用一下()方法进行提交.这样,数据才会真正保存在数据库中.
#!/usr/bin/python
# Filename:
import sys
import MySQLdb
#类
class hq(object):
def __init__(self,conn):
= conn
#验证两人是否存在
def cunzai(self,nameid):
cursor = ()
try:
sql="select * from account where nameid=%s" %nameid
(sql)
print "cunzai:" + sql
rs = ()
if len(rs) !=1:
raise Exception("%s bucunzai" % nameid)
finally:
()
#验证出款人钱够不够
def enough_money(self,nameid,money):
cursor = ()
try:
sql = "select * from account where nameid=%s and money>%s" % (nameid,money)
(sql)
print "enough_money:" + sql
rs = ()
if len(rs) !=1:
raise Exception("%s not have enough money" % nameid)
finally:
()
#减钱
def reduce_money(self,nameid,money):
cursor = ()
try:
sql = "update account set money=money-%s where nameid= %s " % (money,nameid)
(sql)
print "reduce_money:" +sql
if !=1:
raise Exception("%s reduce money fail" % nameid)
finally:
()
#加钱
def add_money(self,nameid,money):
cursor = ()
try:
sql = "update account set money=money+%s where nameid= %s " % (money,nameid)
(sql)
print "add money:" + sql
if !=1:
raise Exception("%s add money fail" % nameid)
finally:
()
#触发所有
def transfer(self,source_acctid,target_acctid,money):
try:
(source_nameid)
(target_nameid)
self.enough_money(source_nameid,money)
self.reduce_money(source_nameid,money)
self.add_money(target_nameid,money)
()
except Exception as e:
()
raise e
#如果出现异常,就回滚当前游标的所有操作,并抛出异常
#主函数
if __name__ == "__main__":
conn = (
host = 'localhost',
port = 3306,
user = 'root',
passwd = '',
db = 'mytest',
charset = 'utf8'
)
source_nameid = [1]
target_nameid = [2]
money = [3]
#从命令行中获取三个参数分别作为出款人,收款人,转账金额
tr_money = hq(conn)
try:
tr_money.transfer(source_nameid,target_nameid,money)
except Exception as e:
print "yichang" , str(e)
finally:
()
命令行代码如下(例如该文件名称为test . py):
$ python 1 2 100
#1给2转账100
创建数据表,并插入数据
#连接数据库
conn = (
host = 'localhost',
port = 3306,
user = 'root',
passwd = '',
db = 'mytest',
charset = 'utf8'
)
cursor = ()
#创建一个表存储数据
sql_create = "create table if not exists account(nameid int, money varchar(100)) "
#插入两条数据
sql_insert1 = "insert into account(nameid,money) values(13,120)"
sql_insert2 = "insert into account(nameid,money) values(14,10)"
#执行上述sql语句
(sql_create)
(sql_insert1)
(sql_insert2)
()
参考慕课网python教程
如果您有什么问题或建议,欢迎留言…^.^