Python 烧瓶通过一对多过滤炼金术
MyFlask应用程序用户将一些数据输入到我在服务器上收到的表单中: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
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)
)