2017-11-24 3 views
0

Ich habe ein Query Objekt, das ich habe einige Filterung auf. Jetzt gebe ich diese Frage weiter und dann möchte ich später sehen, was ich gefiltert habe, indem ich eine Art Inspektion verwende.Get gefilterte Werte von SQL Alchemy ORM-Abfrage

ich habe so weit wie:

>>> q = session.query(Activity).filter(Activity.label == "Foo") 
>>> print(q.whereclause) 
table.activity.label = :label_1 

Ich kann nicht einen Weg, um etwas anderes aus dieser sqlalchemy.sql.elements.BinaryExpression anders als der Spaltenname (nicht der gefilterte Wert, die ich will, in diese finden Fall "Foo").

Antwort

1

Sie können ein _criterion Attribut für detailliertere Informationen verwenden. Beispiele:

In [1]: first = User.query.filter(User.confirmed_at.isnot(None)) 

In [2]: vars(first._criterion) 
Out[2]: 
{'_orig': (Column('confirmed_at', DateTime(), table=<users>), 
    <sqlalchemy.sql.elements.Null object at 0x7f7a667e25c0>), 
'left': Column('confirmed_at', DateTime(), table=<users>), 
'modifiers': {}, 
'negate': <function sqlalchemy.sql.operators.is_>, 
'operator': <function sqlalchemy.sql.operators.isnot>, 
'right': <sqlalchemy.sql.elements.Null object at 0x7f7a667e25c0>, 
'type': NullType()} 

In [3]: second = User.query.filter(User.login_count > 5) 

In [4]: vars(second._criterion) 
Out[4]: 
{'_orig': (Column('login_count', Integer(), table=<users>, nullable=False, server_default=DefaultClause('0', for_update=False)), 
    BindParameter('%(140163529198168 login_count)s', 5, type_=Integer())), 
'left': Column('login_count', Integer(), table=<users>, nullable=False, server_default=DefaultClause('0', for_update=False)), 
'modifiers': {}, 
'negate': <function _operator.le>, 
'operator': <function _operator.gt>, 
'right': BindParameter('%(140163529198168 login_count)s', 5, type_=Integer()), 
'type': Boolean()} 
+0

Ah, schön. Ich wusste nichts über "Vars"! '.whereclause' ist nur ein Alias ​​für' ._criterion'. In diesem Fall kann ich 'q.whereclause.right.effective_value' verwenden. Das gibt mir das "Foo", nach dem ich gesucht habe. Danke, dass du mir 'vars' gezeigt hast :) – Dave

Verwandte Themen