python 操作MySQL数据库

银行转账demo

思路:
  1. 首先要有一个表,存储转账人id和钱数,收款人的id和钱数。建表参考文章末尾创建数据表,并插入数据的代码。
  2. 验证两人是否存在,验证出款热年钱数是否大于转账钱数,最后一人出款,一人收款。
  3. 因此代码分为两大部分,主函数和类。类里边又包含各操作方法,和所有方法的调用执行。
知识点:
  1. python 操作数据库,要安装一个Python和数据库交互的包MySQL-python,然后我们就可以使用MySQLdb这个包进行数据库操作了。
  2. cursor() – 获取操作游标
  3. execute(self, nameid, money) – 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
  4. fetchall() – 返回查询到的所有记录
  5. rollback() – 回滚当前游标的所有操作,即当做什么也没发生
  6. 关闭数据库连接 , 需要分别的关闭指针对象和连接对象.
    cursor.close() 、conn.close()
  7. 在执行完插入或删除或修改操作后,需要调用一下conn.commit()方法进行提交.这样,数据才会真正保存在数据库中.
#!/usr/bin/python
# Filename:three.py
import sys
import MySQLdb

#类
class hq(object):
    def __init__(self,conn):
        self.conn = conn

 #验证两人是否存在
    def cunzai(self,nameid):
        cursor = self.conn.cursor()
        try:
            sql="select * from account where nameid=%s" %nameid
            cursor.execute(sql)
            print "cunzai:" + sql
            rs = cursor.fetchall()
            if len(rs) !=1:
                raise Exception("%s bucunzai" % nameid)
        finally:
            cursor.close()
 #验证出款人钱够不够
    def enough_money(self,nameid,money):
        cursor = self.conn.cursor()
        try:
            sql = "select * from account where nameid=%s and money>%s" % (nameid,money)
            cursor.execute(sql)
            print "enough_money:" + sql
            rs = cursor.fetchall()
            if len(rs) !=1:
                raise Exception("%s not have enough money" % nameid)
        finally:
            cursor.close()

  #减钱
    def reduce_money(self,nameid,money):
        cursor = self.conn.cursor()
        try:
            sql = "update account set money=money-%s where nameid= %s " % (money,nameid)
            cursor.execute(sql)
            print "reduce_money:" +sql
            if cursor.rowcount !=1:
                raise Exception("%s reduce money fail" % nameid)
        finally:
            cursor.close()

 #加钱
    def add_money(self,nameid,money):
        cursor = self.conn.cursor()
        try:
            sql = "update account set money=money+%s where nameid= %s " % (money,nameid)
            cursor.execute(sql)
            print "add money:" + sql
            if cursor.rowcount !=1:
                raise Exception("%s add money fail" % nameid)
        finally:
            cursor.close()

#触发所有
    def transfer(self,source_acctid,target_acctid,money):
        try:
            self.cunzai(source_nameid)
            self.cunzai(target_nameid)
            self.enough_money(source_nameid,money)
            self.reduce_money(source_nameid,money)
            self.add_money(target_nameid,money)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            raise e
#如果出现异常,就回滚当前游标的所有操作,并抛出异常

#主函数
if __name__ == "__main__":
    conn = MySQLdb.Connect(
                        host = 'localhost',
                        port = 3306,
                        user = 'root',
                        passwd = '',
                        db = 'mytest',
                        charset = 'utf8'
                        )

    source_nameid = sys.argv[1]
    target_nameid = sys.argv[2]
    money = sys.argv[3]
    #从命令行中获取三个参数分别作为出款人,收款人,转账金额

    tr_money = hq(conn)

    try:
        tr_money.transfer(source_nameid,target_nameid,money)
    except Exception as e:
        print "yichang" , str(e)
    finally:
        conn.close()
命令行代码如下(例如该文件名称为test . py):
$ python test.py  1   2   100
#1给2转账100

创建数据表,并插入数据

#连接数据库
conn = MySQLdb.Connect(
                        host = 'localhost',
                        port = 3306,
                        user = 'root',
                        passwd = '',
                        db = 'mytest',
                        charset = 'utf8'
                        )

cursor = conn.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语句
cursor.execute(sql_create)
cursor.execute(sql_insert1)
cursor.execute(sql_insert2)
conn.close()

参考慕课网python教程
如果您有什么问题或建议,欢迎留言…^.^

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值