请问老师,连接可以用with上下文管理器来自动关闭吗?

来源:1-3 实战:封装数据库连接池

qq_滨哥_0

2020-06-01 19:14:24

另外,下图中再finally中关闭con,总是有波浪线提示变量在赋值前被引用,要怎么写才能符合pep8规范呢http://img.mukewang.com/climg/5ed4e29f092554db08410429.jpg

写回答

1回答

时间,

2020-06-02

同学,你好。

1、同学需要自定义类来实现该功能

import pymysql

class DB(object):

    def __init__(self, host="localhost", port=3306, db="", user="root", passwd="lmn930925", charset="utf8"):
        # 创建数据库连接
        self.dbconn = pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset=charset)
        # 创建字典型游标(返回的数据是字典类型)
        self.dbcur = self.dbconn.cursor(cursor=pymysql.cursors.DictCursor)

    # __enter__() 和 __exit__() 是with关键字调用的必须方法
    # with本质上就是调用对象的enter和exit方法
    def __enter__(self):
        # 返回游标
        return self.dbcur

    def __exit__(self, exc_type, exc_value, exc_trace):
        # 提交事务
        self.dbconn.commit()
        # 关闭游标
        self.dbcur.close()
        # 关闭数据库连接
        self.dbconn.close()

if __name__ == "__main__":
    with DB(db="demo") as db:
        db.execute("select * from t_dept")
        for i in db:
            print(i)

2、同学可以使用global 关键字,声明此变量是全局变量即可解决该问题

http://img.mukewang.com/climg/5ed5b61a09dfcb2710170514.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

1

0 学习 · 2669 问题

查看课程