python访问数据库是日常编程中经常使用的,一般的代码如下:

可以看出样例代码还是比较多的,有没有办法优化一下呢?有!

def send_msgs(conn_id=None, **kwargs):
conn = get_mysql_conn(conn_id)
cursor = conn.cursor()
sql_db = '''select count(1) from table)'''
cursor.execute(sql_db)
result = cursor.fetchone()
cursor.close()
conn.close()

采用python提过的上下文方式,访问数据库就可以这样写:

def send_msgs(conn_id=None, **kwargs):
with db_conn(conn) as cur:
cur.execute(sql)
r1=cur.fetchone()

缩减了一半以上的代码,而且还可以自动关闭,db_conn怎么写?就是实现下面这样一个类就可以了:

class db_conn(object):

    def __init__(self, conn_id):
self.conn = MySqlHook.get_connection(conn_id=conn_id).get_hook().get_conn()
self.cur = self.conn.cursor() def __enter__(self):
return self.cur def __exit__(self, exc_type, exc_value, exc_trace):
self.conn.commit()
self.cur.close()
self.conn.close()

python上下文小记的更多相关文章

  1. python上下文管理

    一.python上下文介绍: python中的上下文,指的就是代码所执行的环境状态,或者运行的场景 python上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资 ...

  2. python编码小记

    Python编码小记 标签(空格分隔): 编程 python 1.list类型remove()操作 列表对象执行remove()函数后,会自动退出循环,所以如果想利用一个单独的for循环删除列表中多个 ...

  3. python之小记with open...as..上下文管理器

    之前在学习file文件对象是说过,open文件操作结束后要关闭文件,否则会一直占用资源.但是当出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭 with o ...

  4. python 上下文管理器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 上下文管理器(context manager)是Python2.5开始支持的一种语 ...

  5. Python 上下文管理器和else块

    最终,上下文管理器可能几乎与子程序(subroutine)本身一样重要.目前,我们只了解了上下文管理器的皮毛--Basic 语言有with 语句,而且很多语言都有.但是,在各种语言中 with 语句的 ...

  6. Python上下文管理器

    在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.c ...

  7. python上下文管理器ContextLib及with语句

    http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能 ...

  8. Python上下文管理器 with

    对于系统资源的操作,如:文件操作.数据库操作等,我们往往打开文件.连接数据库后忘了将其close掉,这时就可能会引发异常,因此我们常用的做法是: # coding:utf-8 f = open(&qu ...

  9. Python上下文管理协议:__enter__和__exit__

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...

随机推荐

  1. 批量Insert

    oracle INSERT ALL ,) ,) ,) FROM DUAL

  2. core路由设置

    全局路由设置 app.UseMvc(routes => { routes.MapRoute( name: "areas", template: "{area:exi ...

  3. Django rest-framework框架-版本控制

    第一版: from rest_framework.versioning import BaseVersioning class ParamVersion(object): def determine_ ...

  4. sipp如何避免dead call

    uac 和 uas 都加上  -deadcall_wait 0

  5. apache安装phpMyAdmin

    安装phpMyAdmin 我这里是LAMP环境 安装httpd,和phpMyAdmin,数据库可以yum安装看你自己情况选择安装方式 $ yum -y install httpd phpMyAdmin ...

  6. 用命令行的方式把jmeter结果文件JTL生成csv格式的聚合报告

    我们知道 利用jmeter 的GUI的 Aggragate Listner 很容易把一个JTL 文件另存为CSV 文件,该CSV 文件中自动分析了 Transactions 的 90%, Median ...

  7. java——多线程并发库

    JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性. java.util.current包中提供了对线程优化.管理的各项操作,使得线程的使用变得的心应手.该 ...

  8. IP段的正则表达式

    IPv4 prefix格式:比如: 192.168.1.0/24 ^(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{ ...

  9. okhttp拦截器之CacheInterceptor解析

    在上一次[https://www.cnblogs.com/webor2006/p/9150658.html]了解了缓存的存与取的细节之后,接下来就可以分析一下OkHttp的缓存拦截器啦: OkHttp ...

  10. P1052 过河 题解

    复习dp(迪皮)的时候刷到了一道简单路径压缩的题目(一点不会qwq) 题目描述链接. 正解: 首先呢,我们看到题目,自然而然的会想到这种思路: 设状态变量dp[i]表示从第一个格子开始经过一些跳跃跳到 ...