Python sqlAlchemy预处理查询
我正在开发一个用python和Alchemy制作的API 我正在寻找一种优雅的方法,一步一步地准备我的查询 今天,我的代码可以正常工作,但对我来说非常重要,因为有许多重复的内容:Python sqlAlchemy预处理查询,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我正在开发一个用python和Alchemy制作的API 我正在寻找一种优雅的方法,一步一步地准备我的查询 今天,我的代码可以正常工作,但对我来说非常重要,因为有许多重复的内容: if filteron is None: if orderby == 'config': if order == 'DESC': job = JobFull.query.order_by(JobFull.config_id.desc()).limit(limit).
if filteron is None:
if orderby == 'config':
if order == 'DESC':
job = JobFull.query.order_by(JobFull.config_id.desc()).limit(limit).all()
else:
job = JobFull.query.order_by(JobFull.config_id.asc()).limit(limit).all()
elif orderby == 'crawler':
if order == 'DESC':
job = JobFull.query.order_by(JobFull.crawler_id.desc()).limit(limit).all()
else:
job = JobFull.query.order_by(JobFull.crawler_id.asc()).limit(limit).all()
elif orderby == 'site':
if order == 'DESC':
job = JobFull.query.order_by(JobFull.site_id.desc()).limit(limit).all()
else:
job = JobFull.query.order_by(JobFull.site_id.asc()).limit(limit).all()
else:
if order == 'DESC':
job = JobFull.query.order_by(JobFull.job_id.desc()).limit(limit).all()
else:
job = JobFull.query.order_by(JobFull.job_id.asc()).limit(limit).all()
我想做的是准备我的查询,如:
if filteron is None:
if order == 'DESC':
job = job.query.orderby.desc()
if orderby == 'config':
job = job.query.orderby.(JobFull.config_id)
if limit is not None:
job = job.limit(limit)
是否有一种优雅的方法可以做到这一点,或者如果噩梦发生,我是否需要继续我的
关于,将您的逻辑外推到一个可重用的函数中,并与
getattr
函数相结合
def create_query(model, orderby: str='', desc: bool=False, limit: int=0):
""" model: your SQLAlchemy Model
orderby: the name of the column you want to order by
desc: switch to order by Descending
limit: limit the number of results returned"""
query = model.query
if orderby:
col = getattr(model, orderby)
col = col.desc() if desc else col.asc()
query = query.order_by(col)
if limit:
query = query.limit(limit)
return query.all()
嗨,抱歉耽搁了。。。谢谢你的建议,我觉得你很性感!我会尽快尝试并反馈