首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中将对象传递到yield语句

在Python中将对象传递到yield语句
EN

Stack Overflow用户
提问于 2019-06-10 22:22:48
回答 1查看 279关注 0票数 0

我有一个从数据库发出各种读请求的脚本(我有许多类似于read()方法的方法)。我希望避免重复创建和关闭光标的代码。因此,我使用上下文管理器和生成器手拉手。(在下面的代码中,db_connection是一个mysql连接器对象。)

代码语言:javascript
复制
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语句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 22:32:36

在您的自定义实现中,您需要“生成”一个cursor对象,该对象将在with语句的as子句中绑定:

代码中需要修复的3个问题:

将要分配给self.num = num

  • yielding cursor

  • adding的关键字关键字传递给
  • 语句

代码语言:javascript
复制
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;")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56528291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档