优化 SQL 关系炼金请求

Optimise SQL Alchemy request with relationship

我在 Web 应用程序中使用 Flask 和 SQL Alchemy。

我有一个像这样的多对多关系:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Link(Base):
    __tablename__ = 'link'
    id = Column(Integer, primary_key=True)
    name = Column(String(64))
    url = Column(String(128))

class Category(Base):
    __tablename__ = 'category'
    id = Column(Integer, primary_key=True)
    name = Column(String(64))
    links = relationship("Link",
                         secondary=Table('association', Base.metadata,
                                         Column('category_id', Integer, ForeignKey('category.id')),
                                         Column('link_id', Integer, ForeignKey('link.id'))),
                         backref="categories")

所以我得到了 linkscategories

在请求 link 以显示它们及其类别时,我正在这样做:

links = Link.query.all()
for link in links:
    print link.name
    for categorie in link.categories
        print categorie.name

它工作正常,但问题是,对于每个 link.categories 调用,都会执行一个 SQL 查询。因此,如果我得到 10 links,将完成 11 个查询(1 个用于获取 links,每个 link 一个用于获取类别)。

难道不能用 Flask 在一次查询中执行吗? (使用 JOIN) (我不想写SQL查询,我想用ORM)

我自己找到了答案。 查询模型时,我只需要像这样添加选项 joinedload('categories') :

links = Link.query.options(joinedload('categories')).all()
for link in links:
    print link.name
    for categorie in link.categories
        print categorie.name

现在,只执行了一个 SQL 查询。