SQLAlchemy外键延迟加载

时间:2013-11-15 14:23:34

标签: python sqlalchemy

我有一个基本的一对多关系:

class Term(Base):
  __tablename__ = 'term'
  id = Column(Integer, primary_key=True)

class Node(Base):
  __tablename__ = 'node'
  id = Column(Integer, primary_key=True)
  term = Column(Integer, ForeignKey('term.id'))

但是当我加载Node对象时,访问“term”属性,我只得到数字术语id,而不是Term对象。

node = session.query(Node).filter(Node.id == 1).one()
print node.term # 123

如何让外键字段延迟加载对象?

非常感谢。 本

2 个答案:

答案 0 :(得分:3)

因为term属性是Column,sqlalchemy将其映射为该列的值。您可以使用relationship

让sqlalchemy实际加载引用行
from sqlalchemy.orm import relationship

class Term(Base):
  __tablename__ = 'term'
  id = Column(Integer, primary_key=True)

class Node(Base):
  __tablename__ = 'node'
  id = Column(Integer, primary_key=True)
  term = Column(Integer, ForeignKey('term.id'))
  related_term = relationship(Term, backref="nodes")

因为my_node.related_term看起来有点奇怪,所以我更倾向于使用名为table_column的列而不仅仅是table的命名约定,这样我也可以命名{{1}在表之后的属性,而不是发明一些其他奇怪的名称。

答案 1 :(得分:0)

使用node.term的返回值作为新查询,以获取相关对象:

node = session.query(Node).filter(Node.id == 1).one()
related_term = session.query(Term).filter(Term.id == node.term).one()