使用不同关键字的SQLAlchemy搜索

2024-09-30 10:36:13 发布

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

我正在为一个非常具体的问题而挣扎: 我需要在SQLAlchemy中进行类似的搜索,但是关键字的数量是不同的。 下面是一个关键字的代码:

search_query = request.form["searchinput"]
if selectet_wg and not lagernd:
    query = db_session.query(
        Artikel.Artnr,
        Artikel.Benennung,
        Artikel.Bestand,
        Artikel.Vkpreisbr1
    ).filter(
        and_(
            Artikel.Benennung.like("%"+search_query+"%"),
            Artikel.Wg == selectet_wg
        )
    ).order_by(Artikel.Vkpreisbr1.asc())

“searchinput”看起来像这样:“property1,property2,property3”,但也可以是1、2、5或更多的property。 我想将searchinput拆分为“,”(是的,我知道怎么做:)并为每个属性插入另一个类似的search。 因此,对于上面的示例,搜索应该如下所示:

^{pr2}$

我不认为这是一个聪明的主意只是做一个if语句的数量属性和写下查询多次。。。 Im使用最新版本的sqlalchemy和python3.4


Tags: and代码search数量if属性sqlalchemy关键字
2条回答

可以多次调用筛选器:

search_query = request.form["searchinput"]
if selectet_wg and not lagernd:
    query = db_session.query(
        Artikel.Artnr,
        Artikel.Benennung,
        Artikel.Bestand,
        Artikel.Vkpreisbr1
    ).filter(Artikel.Wg == selectet_wg)

    for prop in search_query.split(','):
        query = query.filter(Artikel.Benennung.like("%"+prop+"%"))

    query = query.order_by(Artikel.Vkpreisbr1.asc())

应该可以创建一个您喜欢的过滤器列表,并将它们全部传递给and_
首先创建类似查询的列表:

search_queries = search_query.split(',')
filter = [Artikel.Benennung.like("%"+sq"%") for sq in search_queries]

然后将它们传递给and_,打开列表:

^{pr2}$

*filter必须是and_的最后一个参数,否则python将给您一个错误。在

相关问题 更多 >

    热门问题