2017-11-24 3 views
0

私はフィルタリングを行ったQueryオブジェクトを持っています。今度はそのクエリを回して、後で何らかの検査を使用してフィルタリングしたものを見たいと思います。この中で、SQL Alchemy ORMクエリからフィルタリングされた値を取得

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

私は列名(ない私が欲しいフィルタリングされた値以外のものsqlalchemy.sql.elements.BinaryExpressionの外に何かを取得する方法を見つけることができません:私は限り持って

ケース「Foo」)。

答えて

1

詳細情報については_criterion属性を使用できます。 例:

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

ああ、美しい。私は 'vars'について知らなかった! '.whereclause'は' ._criterion'のエイリアスです。この場合、 'q.whereclause.right.effective_value'を使用することができます。それは私に後の「フー」を与えます。私に 'vars'を見せてくれてありがとう:) – Dave

関連する問題