Я только недавно начал использовать SQLAlchemy и до сих пор не могу обернуть голову вокруг некоторых концепций.
Сводим к основным элементам, у меня есть две таблицы, подобные этой (это с помощью Flask-SQLAlchemy):
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
class Posts(db.Model):
__tablename__ = 'posts'
post_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.user_id'))
post_time = db.Column(db.DateTime)
user = db.relationship('User', backref='posts')
Как мне поступить с запросом списка пользователей и их последних сообщений (исключая пользователей без сообщений). Если бы я использовал SQL, я бы сделал:
SELECT [whatever]
FROM posts AS p
LEFT JOIN users AS u ON u.user_id = p.user_id
WHERE p.post_time = (SELECT MAX(post_time) FROM posts WHERE user_id = u.user_id)
Таким образом, я точно знаю «желаемый» SQL, чтобы получить желаемый эффект, но не знаю, как «правильно» выразить его в SQLAlchemy.
Редактировать: если это важно, я использую SQLAlchemy 0.6.6.