码迷,mamicode.com
首页 > 数据库 > 详细

MySQLdb

时间:2017-03-09 21:48:05      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:rgs   where   final   数据库连接   src   innodb   except   .com   连接   

show create table users查看

INNODB

MyISAM 不支持事务 错误时无法回滚

技术分享

# Python DB API

# 数据库连接对象 connection
# cursor 使用该连接创建并返回游标
# commit 提交当前事务
# rollback 回滚当前事务
# close 关闭连接

# 数据库交互对象 cursor
# 游标对象 用于执行查询和获取结果
# execute(op[,args]) 执行一个数据库查询和命令
# fetchone() 获取结果集的下一行
# fetchmany(size) 获取结果集的下几行
# fetchall() 获取结果集中剩下的所有行
# rowcount 最近一次execute返回数据的行数或影响行数
# close() 关闭游标对象

# 安装
# Python-MySQL connector
# sourceforge.net/projects/mysql-python

# 事务
# 关闭自动commit conn.autocommit(False)
# 否则每条sql作为事务单独提交
# conn.commit()
# conn.rollback()

import MySQLdb

conn = MySQLdb.Connect(
    host = 127.0.0.1,
    post = 3306,
    user = root,
    passwd = 123456,
    db = imooc,
    charset = utf8
    )

def check_acct_available(acctid):
    cursor = conn.cursor()
    try:
        sql = select * from account where acctid=%s % acctid
        cursor.execute(sql)
        cursor.rowcount
        #cursor.fetchall()
        #cursor.fetchmany(3)
        rs = cursor.fetchone()
        if len(rs) != 1:
            raise Exception("账号%s不存在" % acctid)
    finally:
        cursor.close()

def has_enough_money(acctid, money):
    cursor = conn.cursor()
    try:
        sql = select * from account where acctid=%s and money>%s % (acctid, money)
        cursor.execute(sql)
        rs = cursor.fetchone()
        if len(rs) != 1:
            raise Exception("账号%s没有足够的钱" % acctid)
    finally:
        cursor.close()

def reduce_money(acctid, money):
    cursor = conn.cursor()
    try:
        sql = update account set money=money-%s where acctid=%s % (money, acctid)
        cursor.execute(sql)
        if cursor.rowcount != 1:
            raise Exception("账号%s减款失败" % acctid)
    finally:
        cursor.close()

def add_money(acctid, money):
    cursor = conn.cursor()
    try:
        sql = update account set money=money+%s where acctid=%s % (money, acctid)
        cursor.execute(sql)
        if cursor.rowcount != 1:
            raise Exception("账号%s加款失败" % acctid)
    finally:
        cursor.close()

try:
    check_acct_available(1)
    has_enough_money(1, 100)
    reduce_money(1, 100)
    add_money(2, 100)

    conn.commit()
except Exception as e:
    conn.rollback()
finally:
    conn.close()

 

MySQLdb

标签:rgs   where   final   数据库连接   src   innodb   except   .com   连接   

原文地址:http://www.cnblogs.com/jzm17173/p/6528023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!