SQLAlchemy可以在不查询数据库的情况下填充外键关系吗?

时间:2016-01-26 13:03:52

标签: python sqlalchemy

我来自.NET世界,ORM NHibernate可以通过id加载对象来填充外键关系。加载对象只返回具有我指定的标识符的该对象的代理。当我知道标识符存在时,这对填充的关系很有用,因为它不需要查询数据库,从而节省了很多往返。

这是我的情景。我有一个可以与一个或多个部门相关联的客户模型。这些分区静态存储在数据库中,并且可以与一个或多个客户相关联,因此需要我建模多对多关系。这是一个以/api/v1/customers/123/divisions形式的REST API路由,其中​​我以分区ID列表{'division_ids': [1, 2, 3, 4]}的形式发布JSON数据。在这种情况下(实际使用可能相当于20+分区ID,我将需要发出一个查询来获取客户(ID 123)以及4个查询来获取分区。

由于我知道要插入的分区的id,我可以强制SQLAlchemy只使用id而不是获取对象吗?

SQLAlchemy可以做类似的事吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,是的,你可以在关系中使用TestClass testing = new TestClass(); var prop = typeof(TestClass).GetProperty("testDate1"); // Here we get the current value of testing.testDate1, which is the default DateTime.MinValue object o = prop.GetValue(testing); // Here we set o to null... has ZERO effect on testing.testDate1. o = null; // What you actually want is probably the following. // (Remember though that testDate1 can't be null... this just sets it back to DateTime.MinValue.) prop.SetValue(testing, null); Docs:

  

启用大型集合管理的关键功能是所谓的“动态”关系。这是一种可选的relationship()形式,它在访问时返回一个Query对象来代替集合。可以显式地或通过数组切片应用filter()标准以及限制和偏移:

示例表:

lazy="dynamic"

加载Parent对象时,不会加载子对象;相反,class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) children = relationship("Child", lazy="dynamic") class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id')) 对象将被加载到其位置,如果需要,可以用它来访问子对象。

Query