请问老师,连接可以用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 关键字,声明此变量是全局变量即可解决该问题

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