我有两个表:“user”是网站用户列表,“post”是所有用户帖子的列表。 任何用户都关注不同的用户,例如Twitter。 任何“用户”对象都包含一个包含id列表的“跟随”dict属性。 任何“post”对象都包含一个包含id用户的“user_id”标签。
我想从“发布”表中获取一个查询,收集所有与'user_id'相匹配的帖子,其中包含dict中包含的id。
但直接翻译的这样一个查询会导致SELECT中连续有数百个WHERE id = 1 AND id = 2等。还有更好的方法吗?
答案 0 :(得分:1)
目前尚不清楚您的following
dict属性是如何保留的。如果它存储在单独的N-1表Follows
中,假设您的数据库模式如下:
User(UserID, ...)
Post(PostID, UserID, ...)
Follows(UserID, FollowsUserID, ...)
用于检索所需数据的SQL查询将是:
SELECT u.UserID,
p.*
FROM User u
JOIN Follows f
ON u.UserID = f.UserID
JOIN Post p
ON f.FollowsUserID = p.UserID
假设配置了对象和关系,执行相同工作的SA查询类似于:
u = ... # get desired User object
qry = (session.query(Post).
join(User). # User will join to Post properly
join(Follows, Follows.FollowsUserID == User.UserID). # specify the join condition
filter(Follows.User == u)
)