我正在与 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?
有一个与该错误相关的链接,表明问题出在延迟加载上。但在这种情况下,我没有加载任何东西。我对如何建立跨模型关系感到困惑。
可能引用
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()