python-MySQLdb-练习
看完视频,自己练习一遍. 还是遇到问题,不过最终还是解决了.贴上完成的代码.
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-练习的更多相关文章
- Python MySQLdb在Linux下的快速安装
在家里windows环境下搞了一次 见 python MySQLdb在windows环境下的快速安装.问题解决方式 http://blog.csdn.NET/wklken/article/deta ...
- #MySQL for Python(MySQLdb) Note
#MySQL for Python(MySQLdb) Note #切记不要在python中创建表,只做增删改查即可. #步骤:(0)引用库 -->(1)创建连接 -->(2)创建游标 -- ...
- cygwin 下安装python MySQLdb
cygwin 下安装python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- python MySQLdb在windows环境下的快速安装
python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下 ...
- windows 环境下安装python MySQLdb
使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...
- python MySQLdb连接mysql失败(转载)
最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路.关于django,想在这里也额外说一句 ...
- 117、python MySQLdb在windows环境下的快速安装、问题解决方式
使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...
- python MySQLdb Windows下安装教程及问题解决方法(python2.7)
使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装http://www.jb51.net/article/6574 ...
- macOS安装Python MySQLdb
macOS安装Python MySQLdb 0. 参考 Mac OS X - EnvironmentError: mysql_config not found 1. 背景 import MySQLdb ...
随机推荐
- hadoop中Combiner使用中需要注意的地方
今天在写一个MR的时候,用到了combiner.在使用过程中,遇到了一些问题,特此记录一下. Combiner分为两种,一种是可插拔的,一种是不可插拔的. 可插拔的:Combiner和Reduce的处 ...
- Only one database connection at a time is supported
Only one database connection at a time is supported 在网上找到了2个方法: 1. VSS在使用过程中,尤其是数据迁移的过程中,可能会出现上述情况 ...
- 为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?.
- NPIV介绍
我们知道在存储区域网络(SAN:storage area network),主机(Host)能够访问后端存储(比如CLARiiON,VNX)必备的一个前提是主机必须配备HBA卡(Host Bus Ad ...
- html传參中?和&
<a href="MealServlet?type=findbyid&mid=<%=m1.getMealId()%> 在这句传參中?之后的代表要传递的參数当中有两个 ...
- linux编译安装LAMP
Linux安装Apache+MySQL+PHP 安装部分依赖 安装apr(可选) # tar -xf apr-1.5.0.tar.bz2 # cd apr-1.5.0 #./configure --p ...
- 【转】Android 最火的快速开发框架XUtils
原文:http://blog.csdn.net/rain_butterfly/article/details/37812371 最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活 ...
- java17 线程的方法
线程的方法: .isAlive():判断线程是否还活着,即线程是否还未中止. .getPriority():获得线程的优先级数值. .setPriority():设置线程的优先级. .setName( ...
- python 2016 大会 pyconsk ppt ---python dtrace
https://github.com/pyconsk/2016-slides PyCon SK 2016 - March 2016 1DTrace and PythonJesús Cea Aviónj ...
- apache+php+mysql最新版windows下
卸载以前的Apache 1.控制面板先卸载 2.删除E:\Program Files (x86)\Apache Software Foundation下的apache目录 一.安装apache 1.c ...