pymysql装饰器封装

def openClose(fun):
def run(sql=None):
coon =pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
cursor = coon.cursor()
try:
cursor.execute(fun( sql))
data = cursor.fetchall()
coon.commit()
print(data)
except Exception as e:
coon.rollback()
print('运行', str(fun), '方法时出现错误,错误代码:', e)
finally:
cursor.close()
coon.close()
return run @openClose
def runSql(sql=None):
if sql is None:
sql = 'select * from students1'
return sql runSql()
runSql(‘select * from students1‘ where name= ‘tom1’)

添加时间记录功能

添加时间记录功能
def openClose(fun):
def run(sql=None):
coon =pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
cursor = coon.cursor()
try:
start_time = time.time()
cursor.execute(fun( sql))
data = cursor.fetchall()
coon.commit()
end_time = time.time()
print('持续时间:'+str(end_time - start_time))
print(data)
except Exception as e:
coon.rollback()
print('运行', str(fun), '方法时出现错误,错误代码:', e)
finally:
cursor.close()
coon.close()
return run @openClose
def runSql(sql=None):
if sql is None:
sql = 'select * from students1'
return sql runSql()
输出:

open_and_close_db 重要!重要!重要!

open_and_close_db  重要!重要!重要!

def open_and_close_db(do_sql):
def wrapper(sql='select * from students1'):
coon = pymysql.connect(host='localhost' ,port=3306 ,user='root', password='1234qwer', db='test', charset='utf8')
cursor = coon.cursor()
start_time = time.time()
do_sql(cursor, coon, sql)
cursor.close()
coon.close()
end_time = time.time()
print('持续时间:' + str(end_time - start_time))
return wrapper @open_and_close_db
def do_sql(cursor,coon,sql):
try:
cursor.execute(sql)
data = cursor.fetchall()
coon.commit()
print(data)
except Exception as e:
coon.rollback()
print('运行时出现错误,错误代码:', e) do_sql()
do_sql("update students1 set name = 'tom99999' where score = 44")

输出:

pymysql装饰器封装的更多相关文章

  1. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  2. Python之路(第十一篇)装饰器

    一.什么是装饰器? 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1 ...

  3. 面向对象之组合、封装、多态、property装饰器

    概要: 组合 封装 property装饰器 多态 Python推崇鸭子类型:解耦合,统一标准(不用继承) 1. 组合 继承:会传递给子类强制属性 组合:解耦合,减少占用内存.如:正常继承,如果一个班级 ...

  4. 组合,多态与多态性,封装以及property装饰器介绍

    一:组合: 什么是组合:组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象. 为何要用组合:通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合 ...

  5. Python10/24--组合/封装/property装饰器/多态

    组合的应用: 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. 如何用组合 '''class Foo: aaa=111 ...

  6. 面向对象特征:封装、多态 以及 @propetry装饰器

    (继承补充)组合 obj=fun()#对象 obj.attr=foo()#对象的属性等于另一个对象 什么是组合:     A类的对象具备某一个属性,该属性的值是B类的对象   基于这种方式就把A类与B ...

  7. PYTHON-组合 封装 多态 property装饰器

    # 组合'''软件重用的重要方式除了继承之外还有另外一种方式,即:组合组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之 ...

  8. 面向对象之 组合 封装 多态 property 装饰器

    1.组合 什么是组合? 一个对象的属性是来自另一个类的对象,称之为组合 为什么要用组合 组合也是用来解决类与类代码冗余的问题 3.如何用组合 # obj1.xxx=obj2''''''# class ...

  9. 初识面向对象-封装、property装饰器、staticmathod(静态的方法)、classmethod(类方法) (五)

    封装 # class Room:# def __init__(self,name,length,width):# self.__name = name# self.__length = length# ...

随机推荐

  1. Java 之 线程安全(线程同步)

    一.线程安全 当有多个线程同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,这就是线程安全的. 下面通过一个案例来演示线程的 ...

  2. Shell 选择排序

    举例 #!/bin/bash echo "please input a number list:" read -a arrs for((i=0;i<${#arrs[@]};i ...

  3. NVM 安装(window/mac/linux)

    一.window版 1.nvm-windows下载 [下载地址](https://github.com/coreybutler/nvm-windows/releases),下载 nvm-setup.z ...

  4. Mac pro操作快捷键

    1. 在Finder顶部显示文件/文件夹全路径 终端里输入:defaults write com.apple.finder _FXShowPosixPathInTitle -bool TRUE;kil ...

  5. Ansible入门笔记(2)之常用模块

    目录 Ansible常用模块 1.1.Ansible Ad-hoc 1.2.Ansible的基础命令 1.3.常用模块 Ansible常用模块 1.1.Ansible Ad-hoc 什么事ad-hoc ...

  6. Django 之 restframework 解析器的使用

    请求头ContentType application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了.浏览器的原生 <form> 表单,如果不设置 ...

  7. C++编写动态库(.DLL)给C#调用方法

    1.在头文件中按照如下格式编写函数申明 extern "C" __declspec(dllexport) double __stdcall Add(double a, double ...

  8. Vue.prototype 全局变量

    有两种都是在main.js声明 第一种 main.js 声明 Vue.config.productionTip = false // mount axios Vue.$http and this.$h ...

  9. 发送短信验证码的JAVA代码

    package com.moretickets.platform; import com.alibaba.fastjson.JSONException; import com.alibaba.fast ...

  10. RIG exploit kit:恶意活动分析报告——像大多数exploit kit一样,RIG会用被黑的网站和恶意广告进行流量分发

    RIG exploit kit:恶意活动分析报告 from:https://www.freebuf.com/articles/web/110835.html 在过去的几周里,我们曾撰文讨论过Neutr ...