0

私は自分のプロジェクトでsqlalchemyを使用しています。

2つ以上のテーブルが結合されているか、外部キーの関係がある場合に1つの問題が発生し、where条件で結合されたテーブルの属性を照会できません。

例えば。通知テーブルがあり、ユーザーテーブルuser.idはnotice.senderの外部キーです。user.nameで通知を検索したいです。

  1. 通知テーブル:[id、sender(FK user.id)、receiver(FK user.id)、subject、message、status]

  2. ユーザーテーブル:[ID、名前、メールアドレス、アドレス、ステータス]

通知モデルに参加する:

 sender_user = relationship('User', primaryjoin='Notice.sender==user.id', backref=backref("sender_user"))
 receiver_user = relationship('User', primaryjoin='Notice.receiver==user.id', backref=backref("receiver_user")) 

SQL alchemyフィルタークエリ:

  user_name='john'

  notice=db_session.query(Notice) 
  notice = notice.filter(Notice.sender_user.name == user_name)

次のクエリは機能しません:

  notice=db_session.query(Notice) 
  notice = notice.filter(Notice.user.name == user_name)

助けてください!

4

1 に答える 1

0

セッション オブジェクトを取得する必要があります。

query = session.query(Notice).filter(Notice.sender_user.name == user_name)
results = query.all()

それでもうまくいかない場合 (期待した結果が得られない場合)、次のことを試してください。

session.query(Notice, User.name).filter((Notice.sender_user.id == User.id) & (User.name == user_name))
results = query.all()

senderユーザーのIDであるというフィールドもあると思います。次に、これも機能するはずです:

session.query(Notice, User.name).filter((Notice.sender == User.id) & (User.name == user_name))

それらすべてを再試行します。いくつかの小さな変更を加えました。(改訂履歴で確認できます)。それらが機能しない場合は奇妙です... (機能しない場合は、SQLAlchemy メーリング リストに質問を投稿してみてください)

于 2012-05-19T10:09:32.717 に答える