Python FlasksqlAlchemy预处理查询

2024-09-30 20:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个用python和Alchemy制作的API

我正在寻找一种优雅的方法,一步一步地准备我的查询

今天,我的代码可以正常工作,但对我来说非常重要,因为有许多重复的内容:

   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)
        

是否有一种优雅的方法可以做到这一点,或者如果噩梦发生,我是否需要继续我的

问候,


Tags: idconfigbyifjoborderallquery
1条回答
网友
1楼 · 发布于 2024-09-30 20:29:09

将逻辑外推到一个可重用函数中,并与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()

相关问题 更多 >