【问题标题】:AttributeError: __enter__ using with statement SqlAlchemy sessionAttributeError: __enter__ 使用 with 语句 SqlAlchemy 会话
【发布时间】:2017-09-11 19:11:52
【问题描述】:

当我尝试像在这个guide 中那样使用 SQLAalchemy 会话时,我得到了这个AttributeError: __enter__

我的代码:

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

我做错了什么?我正在使用 Python 3.6

【问题讨论】:

  • 您能否发布完整的回溯以显示问题所在?

标签: python session sqlalchemy contextmanager


【解决方案1】:

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

with self.session_scope() as session:
    ...

【讨论】:

    【解决方案2】:

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

    with Session() as session:
        # Do something
    

    如果您收到AttributeError: __enter__,请检查您环境中的SQLAlchemy 版本是否真的是SQLAlchemy&gt;=1.4。更多详情请见this answer

    【讨论】:

    • 对参考版本兼容性投了赞成票。在旧环境上运行 1.3 并想知道为什么它不起作用。
    猜你喜欢
    • 2019-02-07
    • 1970-01-01
    • 2019-12-01
    • 2018-05-27
    • 2016-10-31
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多