使用以下映射集合设置,该设置使用字典语法将Person映射到另一个表中的任意数量的属性:
class FormField(Model):
id = Column(Integer, primary_key=True)
person_id = Column(Integer, ForeignKey('person.id'), nullable=False)
keyword = Column(String(255))
payload = Column(Text)
class Person(Model):
id = Column(Integer, primary_key=True)
name = Column(String(255))
fields = relationship("FormField",
collection_class=attribute_mapped_collection('keyword'),
cascade="all, delete-orphan")
正常用法(另请参阅文档http://docs.sqlalchemy.org/en/latest/orm/collections.html#dictionary-collections):
^{pr2}$搜索具有特定属性值的人员也非常简单。但问题是,如何搜索根本没有属性的人员,尤其是作为更复杂查询的一部分的人员?在
一种方法可以是始终创建所有属性并将NULL放入,例如,有效负载中,但是是否可以有效地搜索完全缺失的属性?例如,如果查询应该挖掘出属性“a”具有值“a”、属性“b”具有值“b”、缺少属性“c”的人员?在
db.session.query(Person).join(FormField).join(FormField_alias)
.filter(FormField.keyword == "a", FormField.payload == "A")
.filter(FormField_alias.keyword == "b", FormField_alias.payload == "B")
# ???
.all()
我想,这并不像再加一个过滤器那么简单。但那又怎样呢?在
可以使用一组EXISTS expressions代替内部联接:
例如,在Postgresql中,EXISTS和NOT EXISTS生成了半连接和反连接,这些半连接和反连接在使用适当的索引时应该非常有效。在
相关问题 更多 >
编程相关推荐