对象已附加到会话

2024-04-25 00:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个使用自己数据库连接的Flask应用程序中的模块编写单元测试。在

模块打开其连接,从而:

engine = create_engine(SQLALCHEMY_DATABASE_URI)
Session = sessionmaker(bind=engine)
session = Session()

然后我在整个模块中使用session。在

我的单元测试在conftest.py上有一个夹具来创建新会话:

^{pr2}$

在我的测试中我会这样做:

def test_schedule_orders_by_last_update(test_session, create_test_user):
    vendor = test_session.query(Vendors).filter(Vendors.name == 'Melie Bianco').first()
    amazon = AmazonRequests(vendor)
    amazon.schedule_orders_by_last_update()
    result = test_session.query(AmazonReportRequests).filter(AmazonReportRequests.vendor == vendor).all()
    assert len(result) == 1
    assert result.vendor.name == vendor.name

我的问题是,当我运行测试时,它总是以以下错误结束:

self = <sqlalchemy.orm.session.Session object at 0x1104fab50>, state = <sqlalchemy.orm.state.InstanceState object at 0x110863f10>, obj = <AmazonReportRequests None>

    def _before_attach(self, state, obj):
        if state.session_id == self.hash_key:
            return False

        if state.session_id and state.session_id in _sessions:
            raise sa_exc.InvalidRequestError(
                "Object '%s' is already attached to session '%s' "
                "(this is '%s')" % (state_str(state),
>                                   state.session_id, self.hash_key))
E           InvalidRequestError: Object '<AmazonReportRequests at 0x110863e90>' is already attached to session '2' (this is '1')

查询不应该只从数据库中检索行而忽略另一个会话吗?在


Tags: 模块nametestselfid数据库issession