#!/usr/bin/env python
#-*-coding:utf-8-*-
#异常处理,with的使用,
class Mycontex(object):def __init__(self,name):self.name=namedef __enter__(self):print("__enter__")return selfdef do_self(self):print('do_self')def __exit__(self,exc_type,exc_value,traceback):print('__exit__')print("Error: ",exc_type," info:",exc_value)if __name__=='__main__':with Mycontex('test context') as f:print(f.name)f.do_self()#!/usr/bin/env python
#-*-coding:utf-8-*-
import MySQLdb
#连接数据库
conn=MySQLdb.Connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='imooc',charset='utf8')
cursor=conn.cursor()sql_insert="insert into user(userid,username) values(10,'name10')"
sql_update="update user set username='name91' where userid=9"
sql_delete="delete from user where userid<3"
#异常处理
try:cursor.execute(sql_insert)print(cursor.rowcount)cursor.execute(sql_update)print(cursor.rowcount)cursor.execute(sql_delete)print(cursor.rowcount)conn.commit()
except Exception as e:print(e)#回滚事物conn.rollback()cursor.close()
conn.close()#!/usr/bin/env python
#-*-coding:utf-8-*
#银行转账模拟
import sys
import MySQLdbclass TransferMoney(object):def __init__(self,conn):self.conn=conn#检查用户是否存在def check_acct_available(self,acctid):cursor=self.conn.cursor()try:sql="select * from account where acctid=%s" % acctidcursor.execute(sql)print("check_acct_available:"+sql)rs=cursor.fetchall()if len(rs)!=1:raise Exception("账号%s不存在" % acctid)finally:cursor.close()#检查用户是否有足够的钱def has_enough_money(self,acctid,money):cursor=self.conn.cursor()try:sql="select * from account where acctid=%s and money>=%s" % (acctid,money)cursor.execute(sql)print("has_enough_money:"+sql)rs=cursor.fetchall()if len(rs)!=1:raise Exception("账号%s没有足够的钱" % acctid)finally:cursor.close()#用户减少的钱def reduce_money(self,acctid,money):cursor=self.conn.cursor()try:sql="update account set money=money-%s where acctid=%s" % (money,acctid)cursor.execute(sql)print("reduce_money:"+sql)if cursor.rowcount!=1:raise Exception("账号%s减款失败" % acctid)finally:cursor.close()def add_money(self,acctid,money):cursor=self.conn.cursor()try:sql="update account set money=money+%s where acctid=%s" % (money,acctid)cursor.execute(sql)print("add_money:"+sql)if cursor.rowcount!=1:raise Exception("账号%s加款失败" % acctid)finally:cursor.close()def transfer(self,source_acctid,target_acctid,money):try:self.check_acct_available(source_acctid)self.check_acct_available(target_acctid)self.has_enough_money(source_acctid,money)self.reduce_money(source_acctid,money)self.add_money(target_acctid,money)self.conn.commit()except Exception as e:self.conn.rollback()raise eif __name__=='__main__':#source_acctid=sys.argv[0]#target_acctid=sys.argv[1]#money=sys.argv[2]source_acctid=input('请输入用户')target_acctid=input('转入用户')money=input('转入金额')conn=MySQLdb.Connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='imooc')tr_money=TransferMoney(conn)try:tr_money.transfer(source_acctid,target_acctid,money)except Exception as e:print('出现问题:'+str(e))finally:conn.close()

Python 数据库连接相关推荐

  1. 在Python数据库连接池中如何创建请求连接的方案

    http://developer.51cto.com/art/201003/189669.htm 在Python数据库连接池中操作过程中如果你设置好了连接池,你就可以按照如下进行操作.通过以下的内容你 ...

  2. python 数据库连接池DBUtils

    python 数据库连接池DBUtils 0x00 简述 0x01 摘要 0x02 模块 0x03 下载及安装 1.下载 2.安装 0x04 SimplePooledDB 0x05 SteadyDB ...

  3. python数据库连接池工具类_Python数据库连接池DBUtils

    DBUtils简介 DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放 ...

  4. python数据库连接类写其他类调用报超时_python面向对象,类,以及连接数据库

    ## 面向对象 ### 1.面向对象三大特性: 封装,继承,多态 ### 1.1.封装 1.在类中对数据的赋值.内部调用对外部用户是透明的 2.这使类变成了一个胶囊或容器,里面包含着类的数据和方法 3 ...

  5. python循环顶帖_设计Python数据库连接池1-对象的循环引用问题

    在Python中如果对象定义了__del__方法的话,在对象的引用记数为0时会自动调用__del__方法(很象c++中的析构函数),但如果A对象引用B对象,B对象又引用A对象,就形成循环引用,此时A, ...

  6. Python数据库连接池DBUtils

    DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口:     PersistentDB :提供线程专用的数据库连接,并自动管理连接. ...

  7. python 数据库连接池_【转】Python 数据库连接池

    python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...

  8. python数据库连接mysql_使用Python连接MySQL数据库

    本篇文章使用python中的pymysql库连接MySQL数据库,并完成建表,数据写入和查询的过程.为了保证内容的完整性,我们将内容分为两个 阶段,***阶段简单介绍数据的爬取过程.看过之前爬虫文章的 ...

  9. Python 数据库连接方法和数据库连接池

    Python连接数据库 Python官方制定的数据库接口标准中,主要包含了顶层connect函数.部分常量.数据库操作异常.用于管理连接的Connection类以及执行查询的Cursor类. DBUt ...

  10. SQLAlchemy:python数据库连接 神器

    SQLAlchemy 是下一代的 Python Object Relational 映射器. SQLAlchemy 的一个目标是提供能兼容众多数据库(如 SQLite.MySQL.Postgres.O ...

最新文章

  1. linux C函数之strdup函数分析【转】
  2. MVC界面开发包Essential Studio for ASP.NET MVC发布2017 v3丨附下载
  3. JVM:jstack
  4. python opencv 界面按钮_PyAutoGUI:自动化键鼠操作的Python类库
  5. tensorflowgpu利用率为0_奥普特冲科:曾侵犯竞争对手商业机密,产能利用率或虚高...
  6. 工作236:点击直接进入
  7. java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例
  8. 用XenoCode 2006 加密dll(.NET
  9. Spring 源码解析 -- SpringWeb过滤器Filter解析
  10. 额度降为0剩下欠款怎么办?
  11. spring 3.0 应用springmvc 构造RESTful URL 详细讲解
  12. 查看docker镜像内部端口号_DOCKER 常用命令
  13. jquery漂浮广告代码
  14. mysql就业方向_SQL数据库专业的就业方向
  15. 关于智能码控门禁系统项目的二维码验证问题
  16. 陈艾盐:《春燕》百集访谈节目第三十九集
  17. 申宝证券-市场呈现出震荡分化走势
  18. Android关于图片压缩
  19. (非常重要).Net Core应用框架Util介绍(学习Util)
  20. Mysql创建多表视图view

热门文章

  1. 幼儿园 c语言,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据
  2. 配置了坐标还是找不到serv_你那么努力,为何还是找不到工作?从优势发展观来看个人职业发展...
  3. 2019计算机开机号003期,2019年011期福彩中心开机号(附汇总)
  4. ming window 交叉编译_如何在Linux for Windows上与MinGW交叉编译?
  5. java观察者模式本质_6.[研磨设计模式笔记]观察者模式
  6. mysql连接字符串加密配置文件_Asp.net2.0如何加密Web.config配置文件数据库连接字符串...
  7. linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了
  8. 【学习笔记】第二章——处理机调度的概念、层次、时机、切换过程 调度方式、调度算法的指标
  9. java 判断范围_java判断一个点是否在一个围栏范围内
  10. return两个返回值_异步函数的两个视角