学习Python和数据库的时候,总想找些实例练手,但是又很难找到自己想做的项目和案例,其实案例就在我们生活中,下面分享一下Python实现简单转账功能的代码。供大家参考。
#-*-coding:utf-8-*-
'''
建表
create database imooc;
create table account(
acctid INT (11) DEFAULT NULL COMMENT '账户ID',
money INT (11) DEFAULT NULL COMMENT '余额'
) ENGINE = INNODB DEFAULT CHARSET = utf8;
新建两个账户:
10 100
20 20
'''
import pymysql
import sys
class TransferMoney(object):
"""docstring for TransferMoney"""
def __init__(self, conn):
self.conn = conn
#检查账户
def check_acct_available(self, acctid):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s"%acctid
cursor.execute(sql)
print "check_acct_available:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s不存在"% acctid)
finally:
cursor.close()
#检查余额
def has_enough_money(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s and money>%s"%(acctid, money)
cursor.execute(sql)
print "has_enough_money:" + sql
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s没有足够的钱"% acctid)
finally:
cursor.close()
#一个账户减款
def reduce_money(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money-%s where acctid=%s"%( money, acctid)
cursor.execute(sql)
print "reduce_money:" + sql
if cursor.rowcount != 1:
raise Exception("账号%s减款失败"% acctid)
finally:
cursor.close()
#一个账户加款
def add_money(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money+%s where acctid=%s"%( money, acctid)
cursor.execute(sql)
print "add_money:" + sql
if cursor.rowcount != 1:
raise Exception("账号%s加款失败"% acctid)
finally:
cursor.close()
#转账
def transfer(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(source_acctid, money)
self.conn.commit()
except Exception, e:
self.conn.rollback()
raise e
if __name__ == '__main__':
source_acctid = sys.argv[1]
target_acctid = sys.argv[2]
money = sys.argv[3]
#定义数据库连接
conn = pymysql.connect(host='127.0.0.1', user='root',passwd='12345678', db='imooc', charset='utf8mb4')
tr_money = TransferMoney(conn)
#检查转账是否成功。
try:
tr_money.transfer(source_acctid, target_acctid, money)
except Exception, e:
print "出现问题:" + str(e)
finally:
conn.close()
上面就是所有代码内容了,希望对大家有所帮助。
如果想快速联系我,欢迎关注微信公众号:AiryData。
也可以访问原文链接: Python连接pymysql库实现简单的转账功能