【发布时间】:2015-08-14 18:46:21
【问题描述】:
假设我有以下(在 Python 3 和 SQLAlchemy 中):
class Book(Base):
id = Column(Integer, primary_key=True)
chapters = relationship("Chapter", backref="book")
class Chapter(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
book_id = Column(Integer, ForeignKey(Book.id))
def check_for_chapter(book):
# This is where I want to check to see if the book has a specific chapter.
for chapter in book.chapters:
if chapter.name == "57th Arabian Tale"
return chapter
return None
这感觉像是一种“非惯用”方法,因为它似乎不太可能利用数据库来搜索给定的章节。在最坏的情况下,似乎n 会调用数据库来检查章节标题,尽管我对 SQLAlchemy 的有限理解表明这可以配置。我不知道是否有一种方法可以直接针对您已经获取的对象的关系发起查询?如果是这样,如何做到这一点?
【问题讨论】:
-
为什么不在
Chapter表中查询book.id?这只需要一个查询 -
请注意,这是一个简化的案例:很可能启动第二个独立查询是获取此信息的最快/最佳方式。但是 a) 检查了原始对象是否存在各种安全问题,并且 b) 它可能已经在缓存中包含该信息,我不确定单独的查询是否必然会绕过原始对象的任何缓存。
标签: python python-3.x sqlalchemy