没有外键的SQLAlchemy for MySQL,我已经创建了这些表:
USER TABLE:
user_id
user_name
BLOCK TABLE:
user_id
blocked_user_id
POST TABLE:
post_id
post_user_id
post_content
COMMENT TABLE:
comment_id
comment_user_id
comment_content
post_id
post_user_id
我想选择帖子的评论而COMMENT.comment_user_id
不在BLOCK.blocked_user_id
,我已经尝试了这一点,但结果是空的:
comments = COMMENT.query.outerjoin(BLOCK, BLOCK.blocked_user_id == COMMENT.comment_user_id).filter(COMMENT.post_id == postid, COMMENT.post_user_id != current_user.user_id).all()
作为替代解决方案,我必须使用两个查询步骤,第一步选择所有blocked_users,第二步选择帖子的评论过滤
COMMENT.comment_user_id.notin_(blocked_users)
答案 0 :(得分:0)
假设您可以在下面的sqlalchemy中使用session,当您在评论和阻止表上进行左连接时,查询将返回正确的结果
comments = session.query(COMMENT).outerjoin(BLOCK, COMMENT.user_id == BLOCK.user_id).filter(BLOCK.user_id == None).all()
所以你的原始查询会得到类似下面的内容
comments = COMMENT.query.outerjoin(BLOCK, COMMENT.blocked_user_id == BLOCK.comment_user_id).filter(BLOCK.blocked_user_id==None).all()
注意:上述查询仅过滤所有未被阻止的用户ID的注释表,您可以根据您对其他列的要求添加更多过滤条件