繁体   English   中英

如何在 postgresql 数组字段上使用 ilike 和任何 sqlalchemy?

[英]How to use ilike and any sqlalchemy on postgresql array field?

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

```
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) 运算符不存在:字符变化 [] ~~ 未知 LINE 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('[]')

这应该工作..

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM