SQLAlchemy:使用高效子搜索查询父级&过滤

时间:2017-12-07 19:32:10

标签: python mysql orm sqlalchemy flask-sqlalchemy

我已经看到了一些类似的主题,但似乎无法使它们中的任何一个有效地工作。

例如:SQLAlchemy: filter many-to-one relationship where the one object has a list containing a specific value

我有这样的数据库结构:

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

0 个答案:

没有答案