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()

最新文章

  1. android应用程序第一次启动时显示引导界面
  2. JavaScript变量作用域
  3. neutron用linux_bridge部署provider网络
  4. Oracle日期时间
  5. objective-c 条件运算符
  6. 【转】SVN服务器客户端以及环境的搭建和使用
  7. 我的第一个CUDA程序
  8. eclipse安装ermaster建模插件
  9. 1104解决ecos挂件中数组传递的相关问题。
  10. 记一次redis挂机导致的服务雪崩事故~不对,是故事
  11. 初学Python(六)——输入输出
  12. Linux Bash Shell字符串截取
  13. Java并发框架——公平性
  14. kafka_2.11-2.1.0测试
  15. combineByKey
  16. VIP系统
  17. c++沉思录 学习笔记 第五章 代理类
  18. Dom4j向XML中指定位置添加、删除、修改节点——(五)
  19. Maven启动代理访问
  20. [C++ Primer] : 第12章: 动态内存

热门文章

  1. C# Redis分布式锁的应用 - 叶子栈 - SegmentFault 思否
  2. C# 中使用正则表达式 Regex.Matches方法的几个应用[转]
  3. YoloV3 训练崩溃
  4. OnePlus5刷 TWRP
  5. JAVA语言程序设计课后习题----第六单元解析(仅供参考)
  6. time 时间模块的函数调用
  7. css 之引入自定义字体/特殊字体-----使用ttf格式语言包
  8. 解决No module named 'sklearn.cross_validation'
  9. Python3.5环境安装及使用 Speech问题解决(转)
  10. java 项目坑记录