【问题标题】:How to use ilike and any sqlalchemy on postgresql array field?如何在 postgresql 数组字段上使用 ilike 和任何 sqlalchemy?
【发布时间】:2020-11-16 02:13:49
【问题描述】:

我知道这可能看起来像是重复的,但是对与这个问题基本相同的问题的答案对我不起作用。

```
from sqlalchemy import or_, func as F

query = request.args.get("query")

search_books = SavedBooks.query.filter(SavedBooks.authors.any(f'{query}')).all()
search_books = 
SavedBooks.query.filter(F.array_to_string(SavedBooks.authors,',').ilike(f'{query}')).all()
search_books = SavedBooks.query.filter(SavedBooks.authors.like(any_(f'{query}'))).all()
 ```

在这三个 search_books 选项中,如果查询字符串是精确的,则第一个返回作者 只匹配。第二个和第一个完全一样, ilike 似乎没有什么不同, 第三个是具有某种语法错误的选项,但我想会起作用。任何 建议?

编辑:这是我尝试不同查询时遇到的错误。

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) 运算符不存在:字符变化[] ~~ 未知 第 3 行: ....isbn13 ILIKE '%eastmond%' OR saved_books.authors LIKE ANY (... ^ 提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。

编辑:

我知道这个相关的帖子,How to use ilike sqlalchemy on postgresql array field?。我用它来提出我的问题。无论如何,我无法使用 ilike 查询数组(字符串)类型的作者列,因此我通过创建一个新列来解决问题,该列是作者列的副本,但采用普通字符串格式(我称为 authors_string)。然后我只是用 ilike 查询了该列,它工作得很好。确保在将作者提交到 authors_string 之前删除括号。我通过使用它来做到这一点。 authors_string = str(authors).strip('[]')

【问题讨论】:

标签: python postgresql sqlalchemy flask-sqlalchemy


【解决方案1】:

这应该可行..

search_books = SavedBooks.query.filter(SavedBooks.authors.ilike(query))).all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2011-05-14
    • 2019-06-05
    • 2017-09-07
    • 2021-01-17
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多