python 操作MySQL数据库

来源:互联网 发布:单片机最小系统是什么 编辑:程序博客网 时间:2024/06/05 10:23

银行转账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.pyimport sysimport 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教程
如果您有什么问题或建议,欢迎留言…^.^

1 0