资讯专栏INFORMATION COLUMN

python使用上下文处理器来管理mysql连接

zorpan / 3115人阅读

一,使用contextmanager

from contextlib import contextmanager
import MySQLdb

DB_CONFIG = {
    "host": "192.168.1.253",
    "user": "pythondb",
    "passwd": "python123",
    "port": 20002,
    "db": "xw",
    "charset": "utf8"
}


@contextmanager
def open_mysql(db_conf):
    try:
        conn = MySQLdb.connect(**db_conf)
        if conn:
            yield conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
    except Exception as e:
        print(e)
    finally:
        conn.close()

if __name__ == "__main__":
    with open_mysql(DB_CONFIG) as con:
        sql = "select 1 as c"
        con.execute(sql)
        rv = con.fetchall()
        print(rv)

二,使用__enter__跟__exit__

class OpenMysqlConn(object):
    def __init__(self, db_conf):
        self.db_conf = db_conf
        self.conn = None

    def __enter__(self):
        try:
            self.conn = MySQLdb.connect(**self.db_conf)
            if self.conn:
                return self.conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
        except (AttributeError, MySQLdb.OperationalError):
            current_app.logger.error("连接数据库失败")

    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.conn:
            self.conn.close()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44303.html

相关文章

  • python 数据库编程,这篇是针对 mysql 的,滚雪球学Python第4季第13篇

    摘要:的安装博客补充知识年最新安装教程,滚雪球学第四季。操作操作数据库一般被程序员成为操作增删改查,其中各个字符分别代表新增,读取,更新,删除。可以返回受影响行数,可以直接通过该值判断是否修改成功。 ...

    xiaowugui666 评论0 收藏0
  • CentOS 下使用 Pipenv + Gunicorn + Supervisor 部署 Flask

    摘要:根据中华人民共和国信息产业部第十二次部务会议审议通过的非经营性互联网信息服务备案管理办法精神,在中华人民共和国境内提供非经营性互联网信息服务,应当办理备案。未经备案,不得在中华人民共和国境内从事非经营性互联网信息服务。 当我们开发了一个简单的 Flask 程序,想把项目部署上线,我们可以选择传统的部署方式或者云部署方式把项目部署上线。在本文中,笔者将使用 阿里云轻量应用服务器 安装 C...

    anyway 评论0 收藏0
  • Python学习笔记:Web后端开发一览

    摘要:试想,在多线程服务器中,多个线程同时处理不同客户端发送的不同请求时,每个线程看到的对象必然不同。多线程服务器会创建一个线程池,再从线程池中选择一个线程用于处理接收到的请求。 框架 Django flask flask是一个轻量的web开发应用示例开发一个小应用 from flask import Flask app = Flask(__name__) @app.route(/) d...

    DrizzleX 评论0 收藏0

发表评论

0条评论

zorpan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<