SQLAlchemy 外键延迟加载

Ben*_*ott 4 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'))
Run Code Online (Sandbox Code Playgroud)

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

node = session.query(Node).filter(Node.id == 1).one()
print node.term # 123
Run Code Online (Sandbox Code Playgroud)

如何获取外键字段来延迟加载对象?

非常感谢。本

Sin*_*ion 5

因为您的term属性是 a Column,所以 sqlalchemy 将其映射为该列的值。您可以使用以下命令让 sqlalchemy 实际加载引用行relationship

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")
Run Code Online (Sandbox Code Playgroud)

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