如何在postgresql数组字段中使用ilike sqlalchemy?

时间:2016-03-28 11:05:18

标签: postgresql sqlalchemy

我正在尝试使用以下代码将一些名称与我在Postgresql数据库中已有的名称相匹配:

last_like = '{last_name}%'.format(last_name)
matches = Session.query(MyTable).filter(or_(
    MyTable.name.ilike(last_like),
    MyTable.other_names.any(last_like, operator=ilike_op),
)).all()

基本上它会尝试匹配名称列在other_names列中存储为数组的任何其他名称。

但我明白了:

KeyError: <function ilike_op at 0x7fb5269e2500>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

要使用postgresql数组字段,您需要使用unnest()函数。 但是,您无法在unnest()子句中使用where的结果。

相反,您可以使用array_to_string功能。搜索other_names字符串将产生相同的效果

from sqlalchemy import func as F
last_like = "%qq%"
matches = session.query(MyTable).filter(or_(
    MyTable.name.ilike(last_like),
    F.array_to_string(MyTable.other_names, ',').ilike(last_like),
)).all()