我使用Flask和SQL Alchemy作为Web应用程序。
我有像这样的多对多关系:
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")
所以我得到links
和categories
。
在请求链接以显示它们及其类别时,我这样做:
links = Link.query.all()
for link in links:
print link.name
for categorie in link.categories
print categorie.name
它工作正常,但问题是,对于每个link.categories
调用,都会执行SQL查询。因此,如果我有10个链接,将完成11个查询(1个用于获取链接,每个链接用于获取类别)。
使用Flask进行一次查询是否可以执行此操作? (使用JOIN
)
(我不想写SQL查询,我想使用ORM)