zoukankan      html  css  js  c++  java
  • python操作mysql——mysql.connector

    先安装 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() #关闭游标
  • 相关阅读:
    js每天进步一点点
    优化数据库的方法及SQL语句优化的原则
    实用js代码大全
    【怒转】 idea快捷键说明大全(中英文对照)
    正则表达式手册
    Flink分布式缓存Distributed Cache
    初识Flink广播变量broadcast
    怒转一波,此人整理的Flink特别好
    flink批处理中的source以及sink介绍
    初识Flink-从WorldCount开始
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/10218435.html
Copyright © 2011-2022 走看看