Отношение "многие ко многим" в sqlalchemy не загружается при добавлении и удалении элементов

Я создал самореференциальное отношение "многие ко многим" в 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 поле пусто!! т.е.

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

вывод 0 пока данные существуют в БД!

В чем проблема?

1 ответ

Вы хотели поставить

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

?

Другие вопросы по тегам