请问老师,连接可以用with上下文管理器来自动关闭吗?
来源:1-3 实战:封装数据库连接池
qq_滨哥_0
2020-06-01 19:14:24
另外,下图中再finally中关闭con,总是有波浪线提示变量在赋值前被引用,要怎么写才能符合pep8规范呢
1回答
同学,你好。
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 关键字,声明此变量是全局变量即可解决该问题
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题