I have one Model:
class Tag(BaseModel):
__tablename__ = 'tags'
__table_args__ = {'mysql_engine': 'InnoDB', 'comment':''}
name = Column(VARCHAR(16), nullable=False, comment="标签名称", unique=True)
leader = Column(VARCHAR(16), ForeignKey('tags.name', ondelete='CASCADE'), comment="上级标签名称")
parent = relationship('Tag', remote_side=[name], foreign_keys=leader, backref=backref('children'))
and when I query parent, It's worked very well :
res = await session.execute(select(Tag).where(Tag.name == 'aaa').options(selectinload(Tag.parent)))
for item in res.scalars():
print(item.name)
print(item.parent.name)
aaa
bbb
but when I want use backref relation to get children, It's raise error:
res = await session.execute(select(Tag).where(Tag.name == 'aaa').options(selectinload(Tag.parent)))
for item in res.scalars():
print(item.name)
print(item.parent.name)
print(item.children.name)
sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attempted in an unexpected place?
what should I do ?