AttributeError:__ enter__使用with语句SqlAlchemy session

w33*_*zel 5 python session sqlalchemy contextmanager

AttributeError: __enter__当我尝试使用像本指南中的 sqlalchemy会话时,我得到这个.

我的代码:

Session = scoped_session(sessionmaker(autoflush=True, autocommit=False, bind=engine))

@contextmanager
def session_scope():
    session = Session()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

class SomeClass:

    def __init__(self):
        self.session_scope = session_scope

    def something_with_session(self):

        with self.session_scope as session: <-- error
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我正在使用python 3.6

swi*_*mer 11

对于那些习惯使用 SQLAlchemy 1.4 方式通过上下文管理器运行会话构建/关闭过程的人来说,如下所示:

with Session() as session:
    # Do something
Run Code Online (Sandbox Code Playgroud)

如果您收到AttributeError: __enter__,请检查您环境中的 SQLAlchemy 版本是否正确SQLAlchemy>=1.4。更多详细信息请参阅此答案


tde*_*ney 10

您必须调用该函数来获取上下文

with self.session_scope() as session:
    ...
Run Code Online (Sandbox Code Playgroud)

  • 哦,我知道这将是一件非常简单的事情.也许是休息时间...谢谢你:D (2认同)