我来自.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可以做类似的事吗?
答案 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