【发布时间】:2017-04-30 06:40:08
【问题描述】:
我正在尝试与 SqlAlchemy 定义一对多关系,其中我有 Parent 有很多 Child
class Parent(Base):
__tablename__ = "parent"
id = Column(String, primary_key = True)
children = relationship("Child")
class Child(Base):
__tablename__ = "child"
id = Column(Integer, primary_key = True)
feed_type_id = Column(String, ForeignKey("parent.id"))
从业务规则来看,Parent 没有太多 Child(介于 10 到 30 之间),并且大多数时候我需要访问所有这些,所以我认为 relationship() 检索内存中的所有孩子是个好主意,以便提高表现(第一个问题:我是对的吗?)但我需要得到一个特定的孩子,但我不会这样做:
def search_bar_attr(some_value)
for bar in foo.bars:
if(bar.attr == some_value)
return bar
lazy="dynamic" 返回一个允许查询的列表,但我认为它对“急切”加载很慢,因为动态关系总是查询数据库。
第二个问题:有没有可以满足我所有需求的配置?
【问题讨论】:
-
这通常很难回答。但是,您可以在查询时specify loading strategy,因此请选择最适合运行查询的上下文的选项。当性能很重要时,我发现最好使用手动构建的 sql 和逻辑来测试查询和函数的性能,然后向后工作并编写相应的 sqlalchemy 表达式。
标签: python sqlalchemy