我有被定義爲三個表:SQLAlchemy的查詢與多個有條件的地方
class User(Base):
__tablename__ = 'users'
id = Column(Integer(10), primary_key=True)
firstname = Column(String(64))
surname = Column(String(64))
class SWMS(Base):
__tablename__ = 'swms'
id = Column(Integer(10), primary_key=True)
owner_id = Column(Integer(10), ForeignKey('users.id', ondelete='CASCADE'))
filename = Column(String(255))
swmowner = relationship('User', backref=backref('users'))
class SWM_perms(Base):
__tablename__ = 'swm_perms'
id = Column(Integer(10), primary_key=True)
swm_id = Column(Integer(10), ForeignKey('swms.id', ondelete='CASCADE'))
user_id = Column(Integer(10), ForeignKey('users.id', ondelete='CASCADE'))
swm = relationship('SWMS', backref=backref('swms'))
swmuser = relationship('User', backref=backref('swmusers'))
從本質上講,SWMS表的文檔信息,其中owner_id定義誰創建的文檔的用戶的表。 SWM_perms是一個表格,它具有文檔ID到用戶ID的映射 - 定義哪些用戶被允許查看文檔。
以產生要麼1)由用戶擁有或2)都可以查看用戶的所有文件的表,在SQL我會做:
select owner_id, users.firstname, users.surname, filename
from swms, swm_perms, users
where users.id=swms.owner_id and
((swms.id=swm_perms.swm_id and swm_perms.user_id = 27) or (owner_id = 27));
你如何定義在SQLAlchemy的這個查詢?我熟悉or_()函數,但我嘗試的變體不會生成正確的對象。