2013-07-24 81 views
0

我有一個對話,用戶和消息的簡單消息系統中的對象定義,像這樣:SQLAlchemy的不同相關對象

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String) 

class Conversation(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 

class Message(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    text = db.Column(db.String) 
    author = db.relationship('User') 
    conversation = db.relationship('Conversation', backref=db.backref('messages', lazy='dynamic')) 

我想獲得的是參與對話的所有用戶。

它在SQL容易的,我:

select distinct users.* 
from users inner join messages on messages.author_id = users.id 
where messages.conversation_id = 1; 

但我無法弄清楚如何做到這一點與SQLAlchemy的語法,所以我回來的對象並不僅僅是領域。理想情況下,我想在會話中將其作爲get_authors方法實施。

回答

3
session.query(User).distinct().\ 
    join(Message, Message.author_id == User.id).\ 
    filter(Message.conversation_id == 1) 
+0

謝謝。連接條件是否應該由消息和對話之間的關係自動生成?爲什麼我需要明確指定它? – gooli

+0

另外,可以在查詢中使用conversation.messages並避免顯式的conversation_id == 1? – gooli