sqlalchemy与过滤器的关系(sqlalchemy relationship with filter)

我试图只获得批准的响应(staged> 1)但由于某种原因,primaryjoin中的Reply.staged> 1不起作用

我对sqlAlchemy很新,所以我不确定父关系与remote_side的关系

class Story(Base): __tablename__ = ’Story' id = Column(‘ID', Integer, primary_key=True) anonymous = Column(TINYINT) detail = Column('detail',String, js_name='detail') summary = Column('summary',String, js_name='questionSummary') user_id = Column('uid', Integer, ForeignKey('rlUser.uid'), js_name='userId') user = relationship("User") inspire_id = Column('inspireID', Integer, js_name='inspireId') staged = Column(TINYINT) class Reply(Base): __tablename__ = 'Reply' id = Column('replyID', Integer, primary_key=True) parent_id = Column('parentID', Integer, ForeignKey('rlReply.replyID'),js_name='parentId') user_id = Column('userID', Integer, js_name='userId') detail = Column(String, js_name='detail') reply_date = Column('replyDate', TIMESTAMP, js_name='replyDate') expertise_type = Column('expertiseType', Integer, js_name='expertiseType') status = Column(Integer) staged = Column(Integer) story = relationship(“Story",primaryjoin='and_(Reply.story_id == Story.id, Reply.parent_id==0, Reply.staged>1)', backref=backref("replies", uselist=True )) parent = relationship('Reply',primaryjoin='and_(Reply.parent_id==Reply.id, Reply.staged>1)', backref='responses', remote_side='Reply.id', viewonly=True, uselist=True) def __init__(self): self.staged = constants.POST_QUEUE_STATUS['STAGED'] @property def reply_count(self): return len(self.responses)

story.replies的where子句:WHERE Reply 。 rushlineID =%s和Reply 。 parentID =%s AND Reply .staged>%s

parms sqlalchemy.engine.base.Engine(110L,0,1)

然而,哪个是完美的:story.replies [0]的where子句.responses:WHERE Reply 。 parentID =%s AND%s>%s

params是sqlalchemy.engine.base.Engine(68L,2,1)

我需要的是WHERE Reply 。 parentID =%s AND AND Reply .staged>%s AND%s>%s sqlalchemy.engine.base.Engine(68L,1,2,1)

I am trying to get only approved responses (staged>1) but for some reason the Reply.staged>1 in the primaryjoin is not working

I am very new to sqlAlchemy so I am not really sure what the relationship for parent is doing with the remote_side

class Story(Base): __tablename__ = ’Story' id = Column(‘ID', Integer, primary_key=True) anonymous = Column(TINYINT) detail = Column('detail',String, js_name='detail') summary = Column('summary',String, js_name='questionSummary') user_id = Column('uid', Integer, ForeignKey('rlUser.uid'), js_name='userId') user = relationship("User") inspire_id = Column('inspireID', Integer, js_name='inspireId') staged = Column(TINYINT) class Reply(Base): __tablename__ = 'Reply' id = Column('replyID', Integer, primary_key=True) parent_id = Column('parentID', Integer, ForeignKey('rlReply.replyID'),js_name='parentId') user_id = Column('userID', Integer, js_name='userId') detail = Column(String, js_name='detail') reply_date = Column('replyDate', TIMESTAMP, js_name='replyDate') expertise_type = Column('expertiseType', Integer, js_name='expertiseType') status = Column(Integer) staged = Column(Integer) story = relationship(“Story",primaryjoin='and_(Reply.story_id == Story.id, Reply.parent_id==0, Reply.staged>1)', backref=backref("replies", uselist=True )) parent = relationship('Reply',primaryjoin='and_(Reply.parent_id==Reply.id, Reply.staged>1)', backref='responses', remote_side='Reply.id', viewonly=True, uselist=True) def __init__(self): self.staged = constants.POST_QUEUE_STATUS['STAGED'] @property def reply_count(self): return len(self.responses)

The where clause for story.replies: WHERE Reply.rushlineID = %s AND Reply.parentID = %s AND Reply.staged > %s

parms sqlalchemy.engine.base.Engine (110L, 0, 1)

Which is perfect, however: the where clause for story.replies[0].responses: WHERE Reply.parentID = %s AND %s > %s

params are sqlalchemy.engine.base.Engine (68L, 2, 1)

what I need is WHERE Reply.parentID = %s AND AND Reply.staged > %s AND %s > %s sqlalchemy.engine.base.Engine (68L, 1, 2, 1)

最满意答案

对此,我不得不承认,我通过试验和很多错误得到了神奇的咒语。 以下是相关位:

parent_id = RlColumn('parentID', Integer, ForeignKey('rlReply.replyID'), js_name='parentId') parent = RlRelationship('Reply', primaryjoin='and_(Reply.parent_id==remote(Reply.id),Reply.flagged_status <2)',remote_side=id, uselist=True, foreign_keys=parent_id, backref='replies')

The magic incantation for this, I have to admit, I got to through trial and a lot of error. Here are the relevant bits:

parent_id = RlColumn('parentID', Integer, ForeignKey('rlReply.replyID'), js_name='parentId') parent = RlRelationship('Reply', primaryjoin='and_(Reply.parent_id==remote(Reply.id),Reply.flagged_status <2)',remote_side=id, uselist=True, foreign_keys=parent_id, backref='replies')sqlalchemy与过滤器的关系(sqlalchemy relationship with filter)

我试图只获得批准的响应(staged> 1)但由于某种原因,primaryjoin中的Reply.staged> 1不起作用

我对sqlAlchemy很新,所以我不确定父关系与remote_side的关系

class Story(Base): __tablename__ = ’Story' id = Column(‘ID', Integer, primary_key=True) anonymous = Column(TINYINT) detail = Column('detail',String, js_name='detail') summary = Column('summary',String, js_name='questionSummary') user_id = Column('uid', Integer, ForeignKey('rlUser.uid'), js_name='userId') user = relationship("User") inspire_id = Column('inspireID', Integer, js_name='inspireId') staged = Column(TINYINT) class Reply(Base): __tablename__ = 'Reply' id = Column('replyID', Integer, primary_key=True) parent_id = Column('parentID', Integer, ForeignKey('rlReply.replyID'),js_name='parentId') user_id = Column('userID', Integer, js_name='userId') detail = Column(String, js_name='detail') reply_date = Column('replyDate', TIMESTAMP, js_name='replyDate') expertise_type = Column('expertiseType', Integer, js_name='expertiseType') status = Column(Integer) staged = Column(Integer) story = relationship(“Story",primaryjoin='and_(Reply.story_id == Story.id, Reply.parent_id==0, Reply.staged>1)', backref=backref("replies", uselist=True )) parent = relationship('Reply',primaryjoin='and_(Reply.parent_id==Reply.id, Reply.staged>1)', backref='responses', remote_side='Reply.id', viewonly=True, uselist=True) def __init__(self): self.staged = constants.POST_QUEUE_STATUS['STAGED'] @property def reply_count(self): return len(self.responses)

story.replies的where子句:WHERE Reply 。 rushlineID =%s和Reply 。 parentID =%s AND Reply .staged>%s

parms sqlalchemy.engine.base.Engine(110L,0,1)

然而,哪个是完美的:story.replies [0]的where子句.responses:WHERE Reply 。 parentID =%s AND%s>%s

params是sqlalchemy.engine.base.Engine(68L,2,1)

我需要的是WHERE Reply 。 parentID =%s AND AND Reply .staged>%s AND%s>%s sqlalchemy.engine.base.Engine(68L,1,2,1)

I am trying to get only approved responses (staged>1) but for some reason the Reply.staged>1 in the primaryjoin is not working

I am very new to sqlAlchemy so I am not really sure what the relationship for parent is doing with the remote_side

class Story(Base): __tablename__ = ’Story' id = Column(‘ID', Integer, primary_key=True) anonymous = Column(TINYINT) detail = Column('detail',String, js_name='detail') summary = Column('summary',String, js_name='questionSummary') user_id = Column('uid', Integer, ForeignKey('rlUser.uid'), js_name='userId') user = relationship("User") inspire_id = Column('inspireID', Integer, js_name='inspireId') staged = Column(TINYINT) class Reply(Base): __tablename__ = 'Reply' id = Column('replyID', Integer, primary_key=True) parent_id = Column('parentID', Integer, ForeignKey('rlReply.replyID'),js_name='parentId') user_id = Column('userID', Integer, js_name='userId') detail = Column(String, js_name='detail') reply_date = Column('replyDate', TIMESTAMP, js_name='replyDate') expertise_type = Column('expertiseType', Integer, js_name='expertiseType') status = Column(Integer) staged = Column(Integer) story = relationship(“Story",primaryjoin='and_(Reply.story_id == Story.id, Reply.parent_id==0, Reply.staged>1)', backref=backref("replies", uselist=True )) parent = relationship('Reply',primaryjoin='and_(Reply.parent_id==Reply.id, Reply.staged>1)', backref='responses', remote_side='Reply.id', viewonly=True, uselist=True) def __init__(self): self.staged = constants.POST_QUEUE_STATUS['STAGED'] @property def reply_count(self): return len(self.responses)

The where clause for story.replies: WHERE Reply.rushlineID = %s AND Reply.parentID = %s AND Reply.staged > %s

parms sqlalchemy.engine.base.Engine (110L, 0, 1)

Which is perfect, however: the where clause for story.replies[0].responses: WHERE Reply.parentID = %s AND %s > %s

params are sqlalchemy.engine.base.Engine (68L, 2, 1)

what I need is WHERE Reply.parentID = %s AND AND Reply.staged > %s AND %s > %s sqlalchemy.engine.base.Engine (68L, 1, 2, 1)

最满意答案

对此,我不得不承认,我通过试验和很多错误得到了神奇的咒语。 以下是相关位:

parent_id = RlColumn('parentID', Integer, ForeignKey('rlReply.replyID'), js_name='parentId') parent = RlRelationship('Reply', primaryjoin='and_(Reply.parent_id==remote(Reply.id),Reply.flagged_status <2)',remote_side=id, uselist=True, foreign_keys=parent_id, backref='replies')

The magic incantation for this, I have to admit, I got to through trial and a lot of error. Here are the relevant bits:

parent_id = RlColumn('parentID', Integer, ForeignKey('rlReply.replyID'), js_name='parentId') parent = RlRelationship('Reply', primaryjoin='and_(Reply.parent_id==remote(Reply.id),Reply.flagged_status <2)',remote_side=id, uselist=True, foreign_keys=parent_id, backref='replies')