0
import dbapi2
conn = dbapi2.connect("db", autocommit=True)

def fetch_generator():
    cursor = conn.cursor()
    for res in cursor.execute('select * from table'):
        yield res

def generator_1():
    for x in fetch_generator():
        yield x

def generator_2():
    for x in generator_1():
        yield x

if __name__ == '__main__':
    for x in generator_2():
        print(x)

これはエラーをスローしますfor x in fetch_generator()

エラー:dbapi2.InterfaceError: Attempted to use a closed cursor

ジェネレーターのチェーンでカーソルが閉じるのはなぜですか? これはスコープの問題であり、コンテキスト マネージャーは 1 つの解決策ですか? delカーソルを自動的に保持したり呼び出したりしないようにするにはどうすればよいですcloseか (いつどこか不明)、開いたままにします。

4

0 に答える 0