看完视频,自己练习一遍. 还是遇到问题,不过最终还是解决了.贴上完成的代码.

CREATE TABLE `NewTable` (
`acctid` int(11) NOT NULL AUTO_INCREMENT COMMENT '账户ID' ,
`money` int(11) NULL DEFAULT NULL COMMENT '余额' ,
PRIMARY KEY (`acctid`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=COMPACT
;

  

# -*- coding:utf-8 -*-
'''
Created on 2015年10月6日 @author: WXG
'''
import MySQLdb class TranslateAccount(object):
def __init__(self, conn):
self.conn = conn def checkAccount(self, acctid):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s" % acctid
print "sql for checkAccount:" + sql
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) < 1 :
raise Exception("不存在此账号%s" % acctid)
finally:
cursor.close() def checkEnoughMoney(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid = %s and money > %s" % (acctid, money)
print "sql for checkEnoughMoney:" + sql
cursor.execute(sql)
rs = cursor.fetchall()
if len(rs) < 1 :
raise Exception("此账号%s没有足够的余额" % acctid)
finally:
cursor.close() def reduceMoney(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money-%s where acctid = %s" % (money,acctid)
print "sql for reduceMoney:" + sql
cursor.execute(sql)
if cursor.rowcount != 1 :
raise Exception("此账号%s减款失败!" % acctid)
finally:
cursor.close() def addMoney(self, acctid, money):
cursor = self.conn.cursor()
try:
sql = "update account set money = money+%s where acctid = %s" % (money,acctid)
print "sql for addMoney:" + sql
cursor.execute(sql)
if cursor.rowcount != 1 :
raise Exception("此账号%s加款失败!" % acctid)
finally:
cursor.close() def translate(self, source_acctid, target_acctid, money):
try:
self.checkAccount(source_acctid)
self.checkAccount(target_acctid)
self.checkEnoughMoney(source_acctid, money)
self.reduceMoney(source_acctid, money)
self.addMoney(target_acctid, money)
self.conn.commit()
except Exception as e:
self.conn.rollback()
print "遇到异常%s,执行回滚!" % e if __name__ == "__main__":
source_acctid = raw_input("Source Account ID:")
target_acctid = raw_input("Target Account ID:")
money = raw_input("Translate Money:")
conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='blog', charset='utf8')
try:
transAccount = TranslateAccount(conn)
transAccount.translate(source_acctid, target_acctid, money)
finally:
conn.close()

  

python-MySQLdb-练习的更多相关文章

  1. Python MySQLdb在Linux下的快速安装

    在家里windows环境下搞了一次 见   python MySQLdb在windows环境下的快速安装.问题解决方式 http://blog.csdn.NET/wklken/article/deta ...

  2. #MySQL for Python(MySQLdb) Note

    #MySQL for Python(MySQLdb) Note #切记不要在python中创建表,只做增删改查即可. #步骤:(0)引用库 -->(1)创建连接 -->(2)创建游标 -- ...

  3. cygwin 下安装python MySQLdb

    cygwin 下安装python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...

  4. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  5. python MySQLdb在windows环境下的快速安装

    python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下 ...

  6. windows 环境下安装python MySQLdb

    使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...

  7. python MySQLdb连接mysql失败(转载)

    最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路.关于django,想在这里也额外说一句 ...

  8. 117、python MySQLdb在windows环境下的快速安装、问题解决方式

    使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...

  9. python MySQLdb Windows下安装教程及问题解决方法(python2.7)

    使用python访问mysql,需要一系列安装 linux下MySQLdb安装见  Python MySQLdb在Linux下的快速安装http://www.jb51.net/article/6574 ...

  10. macOS安装Python MySQLdb

    macOS安装Python MySQLdb 0. 参考 Mac OS X - EnvironmentError: mysql_config not found 1. 背景 import MySQLdb ...

随机推荐

  1. NOIP2002 矩形覆盖

    题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...

  2. HW1.1

    public class Solution { public static void main(String[] args) { System.out.println("Welcome to ...

  3. Win8关机 一直重启的问题 解决方案-摘自网络

    win8关机时自动重启的解决方法:关闭快递启动,默认是启动的,到控制面板 – 电源选项 – 选择电源按钮的功能 – 更改当前不可用的设置 – 关机设置 – 把勾去掉 关闭快速启动.这样就不会关机一直重 ...

  4. Polya定理

    http://www.cnblogs.com/wenruo/p/5304698.html 先看 Polya定理,Burnside引理回忆一下基础知识.总结的很棒. 一个置换就是集合到自身的一个双射,置 ...

  5. 2015 CCPC-C-The Battle of Chibi (UESTC 1217)(动态规划+树状数组)

    赛后当天学长就说了树状数组,结果在一个星期后赖床时才有了一点点思路…… 因为无法提交,不确定是否正确..嗯..有错希望指出,谢谢... 嗯..已经A了..提交地址http://acm.uestc.ed ...

  6. PC-老鸟装机

    老鸟装机 一.硬件安装莫疏忽   1>安装硬盘有讲究     1.单硬盘+单光驱       IDE1----硬盘(Mastet接口)       IDE2----光驱(Mastet接口)    ...

  7. 问题-[WIN8.132位系统]安装Win8.1 遇到无法升级.NET Framework 3.5.1

    问题现象:安装Win8后都遇到了无法升级.NET Framework 3.5.1的问题,在线升级会遇到错误0x800F0906.这使得91手机助手等很多软件无法运行,更郁闷的是,网上几乎所有的解决办法 ...

  8. maven工程-eclipse红叹号

    从公司代码库中check下一份完整代码,在其他开发机器上都能正确构建,唯独一台机器无法正确构建,查证了2个小时,最后还是死在了最基础的问题上 maven工程 工程如下,创建了一个新的maven工程,j ...

  9. java_method_获取数据库中列表的第一行第一列的int值

    List<String[]> counts=DataBaseManage.getInstance().executeQuery(sql, 1, list); int count=0; if ...

  10. FormMove

    private    { Private declarations }    procedure WMMOVE(var Msg: TMessage); message WM_MOVE;  proced ...