14

SQL では、次のような一連の行を取得できます。

SELECT * FROM table WHERE id in (2,3,5,7,11);

同等の sqlalchemy クエリはどのように見えますか? cls.id in [2,3,5,7,11]に評価されるFalseため、このコードは次のようになります。

q = meta.Session.query(cls)
q = q.filter(cls.id in [2,3,5,7,11])
return q.all()

例外で失敗します:

  File "foo.py", line 1234, in findall_by_ids
    q = q.filter(cls.id in [2,3,5,7,11])
  File "<string>", line 1, in <lambda>
  File "/eggs/sqlalchemy/orm/query.py", line 50, in generate
    fn(self, *args[1:], **kw)
  File "/eggs/sqlalchemy/orm/query.py", line 1177, in filter
    "filter() argument must be of type "
ArgumentError: filter() argument must be of type sqlalchemy.sql.ClauseElement
               or string
4

3 に答える 3

25

で使用_

q.filter(cls.id.in_([2, 3, 5, 7, 11]))

あなたの通訳は言った:

ArgumentError: filter() argument must be of type sqlalchemy.sql.ClauseElement
               or string

これらの演算子は上書きされており、必要なフィルターを返しますsqlalchemy.sql.operatorscls.id in [2, 3, 5, 7, 1]機能しない理由は、それinが [2, 3, 5, 7, 1] の演算子であるためです。 Trueorが返されますFalse

于 2013-03-07T09:49:08.063 に答える
4

in_次のように使用します。

q = meta.Session.query(cls)
q = q.filter(cls.id.in_([2,3,5,7,11]))
return q.all()
于 2013-03-07T09:48:07.437 に答える