몇 가지 알림 테이블이 있는데 모든 사용자에게 모든 알림을 표시하기 위해 모든 알림 테이블을 통합하고 싶습니다. 그러나 노조는 제대로 작동하지 않습니다.SQLAlchemy에서 여러 테이블을 통합하는 방법은 무엇입니까?
파이썬 코드
def _get_notifications_query(self, unconfirmed_only=True):
'''
Return base query to return this users notifications.
@param unconfirmed_only
@return Query object
'''
requests = (
DBSession.query(FriendshipRequestNotification)
.outerjoin(UserFriendshipRequestNotification,
UserFriendshipRequestNotification.notification_id==FriendshipRequestNotification.id)
.filter(UserFriendshipRequestNotification.user_id==self.id))
confirmations = (
DBSession.query(FriendshipConfirmationNotification)
.outerjoin(UserFriendshipConfirmationNotification,
UserFriendshipConfirmationNotification.notification_id==FriendshipConfirmationNotification.id)
.filter(UserFriendshipConfirmationNotification.user_id==self.id))
comments = (
DBSession.query(CommentNotification)
.outerjoin(UserCommentNotification,
UserCommentNotification.notification_id==CommentNotification.id)
.filter(UserCommentNotification.user_id==self.id))
if unconfirmed_only:
requests.filter(UserFriendshipRequestNotification.is_confirmed==False)
confirmations.filter(UserFriendshipConfirmationNotification.is_confirmed==False)
comments.filter(UserCommentNotification.is_confirmed==False)
return requests.union(confirmations, comments)
사용 : user._get_notifications_query (unconfirmed_only = 거짓) .ALL()
은 SQL이
SELECT anon_1.friendship_request_notifications_id AS anon_1_friendship_request_notifications_id, anon_1.friendship_request_notifications_created_at AS anon_1_friendship_request_notifications_created_at, anon_1.friendship_request_notifications_requester_id AS anon_1_friendship_request_notifications_requester_id
FROM (SELECT friendship_request_notifications.id AS friendship_request_notifications_id, friendship_request_notifications.created_at AS friendship_request_notifications_created_at, friendship_request_notifications.requester_id AS friendship_request_notifications_requester_id
FROM friendship_request_notifications LEFT OUTER JOIN users_friendship_request_notifications ON users_friendship_request_notifications.notification_id = friendship_request_notifications.id
WHERE users_friendship_request_notifications.user_id = ? UNION SELECT friendship_confirmation_notifications.id AS friendship_confirmation_notifications_id, friendship_confirmation_notifications.created_at AS friendship_confirmation_notifications_created_at, friendship_confirmation_notifications.accepter_id AS friendship_confirmation_notifications_accepter_id
FROM friendship_confirmation_notifications LEFT OUTER JOIN users_friendship_confirmation_notifications ON users_friendship_confirmation_notifications.notification_id = friendship_confirmation_notifications.id
WHERE users_friendship_confirmation_notifications.user_id = ? UNION SELECT comment_notifications.id AS comment_notifications_id, comment_notifications.created_at AS comment_notifications_created_at, comment_notifications.comment_id AS comment_notifications_comment_id
FROM comment_notifications LEFT OUTER JOIN users_comment_notifications ON users_comment_notifications.notification_id = comment_notifications.id
WHERE users_comment_notifications.user_id = ?) AS anon_1
내가이 따라 뭔가를 기대 생성 라인
SELECT * FROM friendship_request_notifications
UNION
SELECT * FROM friendship_confirmation_notifications
UNION
SELECT * FROM comment_notifications
또한 SQLAlchemy에서 집계 된 통합 결과를 정렬 할 수있는 방법이 있습니까?
편집
내가 sqlalchemy.sql.union()
올바른 SQL을 생산하고 있음을 언급해야한다,하지만 난 (레코드를 계산/리턴)에 ORM에서 그 활용 방법을 잘 모릅니다.
2 개 이상의 쿼리로 구성된 유니온을 생성해야하며, 유니온에서 쿼리의 수는 동적입니다. sqlalchemy.sql.union() is not working. 문법은 무엇입니까? – vishal