2017-12-08 8 views
0

私はこのようなSQLAlchemyの中に多対多の自己参照関係作成:私はに項目を追加するためにappendを使用する場合多対多の関係には、項目を追加および削除しながら、

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)) 

blacklistフィールドそれは動作し、新しいデータはDBにコミットされます

しかし、私はリストにアクセスする必要があるときblacklistフィールドは空です!データがDBに存在している間 すなわち

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

出力0であります!

何が問題ですか?

答えて

0

あなたはそうしないと、私はあなたがより多くのコンテキストが必要だと思う

print len(u.blacklist) 

を置くことを意味しました。

EDIT

あなたが試すことができます:

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 

: あなたは上から以下のような出力が得られますあなたが得ることを言っていますか?

+0

はい、実際に私はこのような別のフィールドがあり、このタイプミスはそのためです。私はその質問を編集した。 DBにデータが存在する間は、これらのフィールドの両方が空白になります。 – RYN

+0

はい、まったく!これが問題です – RYN

関連する問題