先安装 pip, python 的包管理工具

 

安装

sudo pip install mysql-connector-python

 

连接数据库

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import mysql.connector

db = mysql.connector.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'gou110422',
    database = 'test',
    charset = 'utf8'
)
cursor = db.cursor()

sql_query = 'select name,money from user;'
#执行sql 语句
cursor.execute(sql_query)
print cursor.rowcount
rs = cursor.fetchall()
#cursor.rowcount 表中受影响数据个数
#fetchall() 获取所有数据
#fetchone()  获取一条数据
#fetchmany(3) 获取 3个数据
print rs
for item in rs:
    print 'name: %s  money: %s' % item
print '成功'
#cursor.close() #关闭游标
db.close()

api:http://www.runoob.com/python3/python-mysql-connector.html

示例:

# -*- coding: UTF-8 -*-
import mysql.connector

class TransferMoney():
    def __init__(self, db):
        self.db = db
    #转账流程
    def transferMoney(self, id, targetId, money):
        try:
            self.checkTargetUser(targetId) #检查被转账账号是否存在
            self.checkMoney(id, money) #检查余额是否足够
            self.transfer(id, targetId, money) #转账
            self.db.commit() #提交修改
        except Exception as e:
            self.db.rollback() #回滚事物
            raise e
    #检查被转账账号是否存在
    def checkTargetUser(self, id):
        try:
            cursor = self.db.cursor()
            sql_query = 'select * from user where id=%s;' % id
            cursor.execute(sql_query)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception('转账账户不存在!')
            else:
               print '转账账户存在!'
        except mysql.connector.Error as e:
            raise Exception('检查被转账账户是否存在出错:' + str(e))
        finally:
            cursor.close()
    #检查转账金额
    def checkMoney(self, id, money):
        try:
            cursor = self.db.cursor()
            sql_query = 'select * from user where id=%s and money > %s;' % (id,money)
            cursor.execute(sql_query)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception('转账账户余额不足!')
            else:
               print '转账方金额充足!' 
        except mysql.connector.Error as e:
            raise Exception('检查金额出错::' + str(e))
        finally:
            cursor.close()
    #转账
    def transfer(self, id, targetId, money):
        try:
            cursor = self.db.cursor()
            #自己先减去转账金额
            sql_query = 'update user set money=money-%s where id=%s;' % (money,id)
            rs = cursor.execute(sql_query)
            if cursor.rowcount != 1:
                raise Exception('账号%s减款失败!' % id)
            #目标账户加上转账金额
            sql_query1 = 'update user set money=money+%s where id=%s;' % (money, targetId)
            cursor.execute(sql_query1)
            if cursor.rowcount != 1:
                raise Exception('账号%s加款失败!' % targetId)
            print '成功转账%s元!' %  money
        except mysql.connector.Error as e:
            raise Exception('转账出错:' + str(e))
        finally:
            cursor.close()

if __name__ ==  '__main__':
    db = mysql.connector.connect(host='127.0.0.1',port=3306,user='root',passwd='gou110422',database='test',charset='utf8')
    base = TransferMoney(db)
    try:
        id,targetId,money = (1,2,100)
        base.transferMoney(id, targetId, money)
    except Exception as e:
        print '异常:',e
    finally:
        db.close()
#cursor.execute执行sql 语句
#cursor.rowcount 表中受影响数据个数 放在execute()之后
#fetchall() 获取所有数据
#fetchone()  获取一条数据
#fetchmany(3) 获取 3个数据
#db.commit() 数据表内容有更新,必须使用到该语句
#cursor.close() #关闭游标

 

posted on 2019-01-04 10:29  浅唱年华1920  阅读(1105)  评论(0编辑  收藏  举报