添加多对多关系时出现与延迟加载相关的错误

问题描述 投票:0回答:1

我正在与 SQLAlchemy 作斗争。我有一个设置了多对多关系的模型:

class User(Base):
    roles: Mapped[List["Role"]] = relationship(
        secondary="user_roles", back_populates="users"
    )

我正在设置一些代码来用测试数据填充数据库:

    user = await register_user(
        email="[email protected]", username="username", password="test1234"
    )
    db_session.add(user)
    await db_session.commit()

    admin_role = Role(name="Admin", owner_id=user.id)
    db_session.add(admin_role)

    user.roles.append(admin_role)
    db_session.add(user)
    await db_session.commit()

但是当我这样做时,我得到了

sqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place?

有一个与该错误相关的链接,表明问题出在延迟加载上。但在这种情况下,我没有加载任何东西。我对如何建立跨模型关系感到困惑。

python sqlalchemy
1个回答
0
投票

可能引用

user.id
,因为用户在提交时已过期。 我认为添加后附加角色应该就足够了。这可以通过切换提交时过期来配置。

你可以试试这个:


    user = await register_user(
        email="[email protected]", username="username", password="test1234"
    )
    db_session.add(user)
    await db_session.commit()

    admin_role = Role(name="Admin")
    db_session.add(admin_role)

    user.roles.append(admin_role)
    await db_session.commit()
© www.soinside.com 2019 - 2024. All rights reserved.