Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlAlchemy预处理查询_Python_Flask_Flask Sqlalchemy - Fatal编程技术网

Python sqlAlchemy预处理查询

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).

我正在开发一个用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)
        
是否有一种优雅的方法可以做到这一点,或者如果噩梦发生,我是否需要继续我的


关于,

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

嗨,抱歉耽搁了。。。谢谢你的建议,我觉得你很性感!我会尽快尝试并反馈