Python 烧瓶通过一对多过滤炼金术

Python 烧瓶通过一对多过滤炼金术,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,MyFlask应用程序用户将一些数据输入到我在服务器上收到的表单中: t_date = request.form['t_date'] #convert to date t_date = request.form['t_date'] #convert to date certificate = request.form['certificate'] #name string skill = request.form['skill'] #name string ... 然后我使用flask sql

MyFlask应用程序用户将一些数据输入到我在服务器上收到的表单中:

t_date = request.form['t_date'] #convert to date
t_date = request.form['t_date'] #convert to date
certificate = request.form['certificate'] #name string
skill = request.form['skill'] #name string
...
然后我使用flask sqlalchemy从
MainModel
查询所需数据,如下所示:


query = MainModel.query.filter(
        ((MainModel.from_date >= f_date) &
        (MainModel.from_date <= t_date)).self_group() |
        ((MainModel.to_date >= f_date) &
        (MainModel.to_date <= t_date)).self_group()).all()
需要:我不确定循环是否会导致任何性能问题,但它会使整个代码有点混乱。那么,如何改进初始
查询
以避免过多的循环呢?比如:

query I wrote above + all().filter_by(MainModel.company.certificates.contains(certificate) and .skills.contains(skill)
根据评论请求更新

模型示例:

class MainModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)
    company = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False)


class Company(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)
    certificates = db.relationship('Certificate',
                                        secondary=certif_company,
                                        backref=db.backref('company',
                                                           lazy='dynamic'))


class Certificate(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)

    certif_company = db.Table('certif_company',
        db.Column('certificate_id', db.Integer, db.ForeignKey('certificate.id'), primary_key=True),
        db.Column('company_id', db.Integer, db.ForeignKey('company.id'), primary_key=True)
    )

您可以添加您试图查询的各种模型的详细信息吗?@JRajan yes,添加了一个示例
class MainModel(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)
    company = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False)


class Company(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)
    certificates = db.relationship('Certificate',
                                        secondary=certif_company,
                                        backref=db.backref('company',
                                                           lazy='dynamic'))


class Certificate(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), nullable=False)

    certif_company = db.Table('certif_company',
        db.Column('certificate_id', db.Integer, db.ForeignKey('certificate.id'), primary_key=True),
        db.Column('company_id', db.Integer, db.ForeignKey('company.id'), primary_key=True)
    )