MySQLdb
Posted jzm17173
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQLdb相关的知识,希望对你有一定的参考价值。
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()
try: try: #xxx 异常name \'xxx\' is not defined raise Exception("-----") finally: print("=======") except Exception as e: print("异常%s" % e)
以上是关于MySQLdb的主要内容,如果未能解决你的问题,请参考以下文章
无法在 App Engine 上捕获 MySQLdb.OperationalError
win10 64位 python3.6 django1.11 MysqlDB No module named 'MySQLdb' 安装MysqlDB报错 Microsoft Visua