我正在尝试使用以下代码将一些名称与我在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>
我做错了什么?
答案 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()