sqlalchemy中的ManytoMany关系在添加和删除项时不会加载

2024-05-23 17:41:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在SQLAlchemy中创建了一个多对多的自引用关系,如下所示:

blacklist_association_table = Table('userblacklist', Base.metadata,
    Column('user_id', Integer, ForeignKey('user.id'), primary_key=True),
    Column('blacklisted_id', Integer, ForeignKey('user.id'), primary_key=True)
)


class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=True)

    blacklist = relationship("User",
                             secondary=blacklist_association_table,
                             primaryjoin=(id == blacklist_association_table.c.user_id),
                             secondaryjoin=(blacklist_association_table.c.blacklisted_id == id))

当我使用append将项添加到blacklist字段时,它会工作,新数据会提交到数据库

但是当我需要访问列表时,blacklist字段是空的!! i、 e

u = session.query(User).filter(User.id == userid).one_or_none()
print len(u.blacklist)

当数据存在于数据库中时,输出为0

有什么问题


Tags: 数据keyidtruebasetablecolumninteger
1条回答
网友
1楼 · 发布于 2024-05-23 17:41:36

你的意思是说

print len(u.blacklist)

否则我认为你需要更多的背景

编辑

你能试试吗

u = session.query(User).filter(User.id == userid).one_or_none()
print len(u.blacklist)
u.blacklist.append(session.query(User).first())
session.commit()
print len(u.blacklist)
u = session.query(User).filter(User.id == userid).one_or_none()
print len(u.blacklist)

从上面我可以看出你的代码是正确的。 您的意思是,您将从上面得到以下输出:

0
1
0

?

相关问题 更多 >