' 已附加到会话 '5'(这是 '4'),python-3.x,sqlalchemy,pytest,factory-boy"/>

首页 > 解决方案 > sqlalchemy.exc.InvalidRequestError:对象'' 已附加到会话 '5'(这是 '4')

问题描述

介绍

我正在尝试在表中播种数据以进行测试。为此,我正在使用工厂男孩包。

我已经建立了一个处理播种的工厂类。

class OrderItemFactory(factory.alchemy.SQLAlchemyModelFactory):
    id = factory.Sequence(lambda n: n)

    orders = factory.SubFactory(
        'testsuite.database.factories.OrderFactory.OrderFactory')
    items = factory.SubFactory(
        'testsuite.database.factories.ItemFactory.ItemFactory')

    class Meta:
        model = OrderItem
        sqlalchemy_session_persistence = 'commit'

问题

在测试中,我运行以下代码来创建订单。

    # create order
    order = OrderFactory.create()
    item = session.query(Item).\
        filter(Item.id == 1).\
        first()

    orderItem = OrderItemFactory.create(
        orders=order,
        items=item
    )

但是,如果我要手动创建一行,一切正常。

orderItem = OrderItem(
    order_id=order.id,
    item_id=item.id
)

session.add(orderItem)
session.commit()

标签: python-3.xsqlalchemypytestfactory-boy

解决方案


如果您使用的是flask_sqlalchemy,那么您应该检查您是否插入了正确的字段,而不是数据库关系。


推荐阅读