如何从SQLAlchemy中的嵌套关​​系快速查询?

时间:2015-09-17 22:52:01

标签: python sqlalchemy

我在SQLAlchemy数据库中有这些表:

(*kinfo).start_time = timespec_to_ns((*current).start_time); 表:

DSource

class DSource(Base): __tablename__ = 'dsource' source_id = Column(Integer, primary_key=True) subjects= relationship("Subject") 表:

Subject

class Subject(Base): __tablename__ = 'subject' subject_id = Column(Integer, primary_key=True) source_id=Column(Integer, ForeignKey("dsource.source_id"),nullable=False) sequences= relationship("DSequence") 表:

DSequence

class DSequence(Base): __tablename__ = 'dsequence' sequence_id = Column(Integer, primary_key=True) subject_id = Column(Integer, ForeignKey("subject.subject_id"),nullable=False) frames= relationship("Frame") 表:

Frame

现在我想针对class Frame(Base): __tablename__ = 'frame' f_id = Column(Integer, primary_key=True) sequence_id=Column(Integer, ForeignKey("dsequence.sequence_id"),nullable=False) action_units=Column(String) expression=Column(String) pts3d=Column(String) pts2d=Column(String) 表编写一个查询,该表为我提供了Frame的所有帧。一种方法是编写一个嵌套循环,用source_id=2检索所有subjects,然后为每个主题找到序列,然后为每个序列找到相应的帧。

dsource=2

但是查询具有这些嵌套关系的数据库真的很慢,因为在fr=session.query(Frame,Subject,DSequence,DSource).filter(DSource.source_id==2).all() 表中我有大约90,000个帧。 有什么方法可以更快地查询吗?我不确定Frame是否可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案,有一种非常简单的方法可以执行上述查询,而且速度非常快:

sudo apt-get upgrade