SQLAlchemy不同的相关对象

时间:2013-07-24 17:24:09

标签: 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方法。

1 个答案:

答案 0 :(得分:5)

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