我有一个从数据库发出各种读请求的脚本(我有许多类似于read()
方法的方法)。我希望避免重复创建和关闭光标的代码。因此,我使用上下文管理器和生成器手拉手。(在下面的代码中,db_connection
是一个mysql连接器对象。)
from contextlib import contextmanager
class DatabaseReader():
def __init__(self, db_connection):
self.db_connection = db_connection
self.num = num
@contextmanager
def connect(self):
cursor = self.db_connection.cursor(buffered=True)
try:
yield
finally:
cursor.close()
def read(self):
with self.connect():
cursor.execute("SELECT * FROM table;")
但是,由于没有定义cursor
,所以调用'read‘方法会给我一个AttributeError
。如何将游标对象“传递”给yield语句?
发布于 2019-06-10 22:32:36
在您的自定义实现中,您需要“生成”一个cursor
对象,该对象将在with
语句的as
子句中绑定:
代码中需要修复的3个问题:
将要分配给self.num = num
cursor
from contextlib import contextmanager
class DatabaseReader():
def __init__(self, db_connection, num):
self.db_connection = db_connection
self.num = num
@contextmanager
def connect(self):
cursor = self.db_connection.cursor(buffered=True)
try:
yield cursor
finally:
cursor.close()
def read(self):
with self.connect() as cur:
cur.execute("SELECT * FROM table;")
https://stackoverflow.com/questions/56528291
复制相似问题