Отношение "многие ко многим" в 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
?