how can I get backref relation in in async sqlalchemy?

Viewed 54

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 ?

0 Answers
Related