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

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. vijosP1115 火星人

    vijosP1115 火星人 链接:https://vijos.org/p/1115 [思路] 排列组合. 题目要求为求第下m个排列. 这里有两种方法,首选的是调用algorithm中的next_pe ...

  2. repeater中后台动态为控件添加属性

    在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...

  3. 64位linux安装android sdk的问题

    截至到今天,似乎在64位机器下安装android sdk存在不能运行的问题,可以用以下方法解决: Android SDK requires: Fedora 17 64bit with 32bit An ...

  4. mysql-no-install 手动安装

    D:\mysql-5.5.28-win32 1.下载mysql-5.5.15-win32.zip,解压到本地D:\mysql. 2.将my-small.ini另存为my.ini .(根据情况可以选择别 ...

  5. iOS开发:创建真机调试证书

    关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...

  6. 前端javascript规范文档 (http://www.xuanfengge.com/category/web)

    说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...

  7. 【系列】Matei Zaharia(Spark系统作者)博士论文-0 摘要

    随着处理器提升速度下降和数据量的不断增长,非常多公司和组织(既有互联网公司也有传统的企业另一些研究机构)都要求他们的应用可以Scale out到更大的分布式系统上(比方整个数据中心). 这些应用又分为 ...

  8. ApkTool动态打包

    引言: APK在推广的时候可能会须要动态打包APK.比方公布到不同渠道的时候,须要在manifest文件里改动渠道信息.或者app在推广的时候.须要在apk包里面加上推广人信息等. 环境变量: 1.J ...

  9. eclipse 中修改 M2_REPO的值--转载

    从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,一般windows用户的操作系统都安装在C盘,所以这个目录 下的jar包 ...

  10. Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版

    1.  登录注册IO版的Java项目框架,如下: 2. 具体代码实现: (1)User.java(cn.itcast.game): package cn.itcast.pojo; /** * 这是用户 ...