2016-03-28 6 views
0

Ich versuche, einige Namen mit dem Namen übereinstimmen, mit dem folgenden Code:Wie benutzt man ilike sqlalchemy im Postgresql Array Feld? Ich habe bereits in meiner Postgresql Datenbank

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() 

Im Wesentlichen versucht, die Namensspalte oder keines der anderen Namen entsprechen gespeichert als ein Array in der Spalte andere_Namen.

Aber ich bekomme:

KeyError: <function ilike_op at 0x7fb5269e2500> 

Was mache ich falsch?

Antwort

0

Für die Verwendung Postgresql-Array-Feld müssen Sie unnest() Funktion verwenden. Aber Sie können nicht das Ergebnis von unnest() in where Klausel verwenden.

Stattdessen können Sie array_to_string Funktion verwenden. Die Suche nach einer Zeichenfolge von other_names ergibt den gleichen Effekt

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() 
Verwandte Themen