SQLAlchemy: как объединять таблицы и фильтровать по условию! =?

0

SQLAlchemy для 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()

В качестве альтернативного решения я должен использовать два шага запроса, первый шаг для выбора всех заблокированных_записей, второй шаг для выбора фильтра комментариев для комментариев

COMMENT.comment_user_id.notin_(blocked_users)
Теги:
sqlalchemy
flask-sqlalchemy

1 ответ

0

предполагая, что вы можете использовать сеанс для sqlalchemy ниже запроса вернет вам правильный результат, поскольку вы принимаете левое соединение в таблице комментариев и блоков

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()

Примечание: выше запрос фильтрует все комментарии с помощью userid, который не является заблокированной таблицей, вы можете добавить свои дополнительные условия фильтра согласно вашему требованию для других столбцов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню