我已经看到了一些类似的主题,但似乎无法使它们中的任何一个有效地工作。
我有这样的数据库结构:
class Base(db.Model):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True)
class Items(Base):
title = db.Column(db.String(250))
class Criteria(Base):
_name = db.Column('name', db.String(250), nullable=False, unique=False)
class Response(Base):
item_id = db.Column(db.Integer(), db.ForeignKey('items.id'))
criterion_id = db.Column(db.Integer(), db.ForeignKey('criteria.id'))
value = db.Column('value', db.Text(), nullable=True)
item = db.relationship('Items', backref=db.backref('responses', lazy='joined', cascade='all, delete'))
我正试图通过一系列Items
值过滤Response
,如下所示:
filters = [{'c_id':5, 'value': 'yes'}, {'c_id':6, 'value': 'no'}]
items = Items.query
for f in filters:
items = items.filter(Item.responses.any(and_(Response.value == f['value'], Response.criterion_id == f['c_id'])))
查询成功,我得到Items
,但查询速度非常慢,只有100 Items
小于2,000 Responses
的数据集。
我正在对结果进行分页,因此只有25个结果返回给用户最多
我的问题是使用join()
返回这些结果的更有效方法吗?
Python 3.6,Flask-sqlalchemy,MySQL