2

Windowsボックスでpython 2.7用に書いたスクリプトがあります。いくつかの異なるマシンで動作させているので、問題なく「動く」ことはわかっています。

現在、ubuntu ボックス (v12.04) をセットアップしています。

ubuntu では同じコードが失敗します。

instance = session.query(formats_table).\
filter(formats_table.c.formatid==FormatID, 
       formats_table.c.puid==PUID, 
       formats_table.c.formatversion==FormatVersion, 
       formats_table.c.formatmimetype==FormatMIMEType).all()

Windowsでは問題なく動作し、問題はありません

ubuntu では次のように失敗します。

TypeError: <lamba>() takes exactly 2 arguments (5 given)

何が問題なのかを知るにはどうすればよいですか?

この行は、2 つの (session.query) と (filter) ではなく、5 つの異なる引数として解析されていると想定しています。これは、ブラケットが正しく解析されていないことを示唆していますか?

4

1 に答える 1

3

2 つの異なるバージョンの SQLAlchemy があります。

SQLAlchemy のfilterメソッド:

filter(*criterion)

SQL 式を使用して、指定されたフィルタリング基準をこのクエリのコピーに適用します。

例えば: session.query(MyClass).filter(MyClass.name == 'some name')

複数の基準は AND で結合されます(0.7.5 の新機能) :

session.query(MyClass).filter(MyClass.name == 'some name', MyClass.id > 5)

0.7.5 より前のバージョンでは、1 回の呼び出しで複数の条件を指定することはできませんでした。同じ効果を得るには、filter複数の呼び出しを連鎖させる必要がありました。filterあなたの場合、それは次のようになります。

instance = session.query(formats_table).\
filter(formats_table.c.formatid==FormatID).\
filter(formats_table.c.puid==PUID).\
filter(formats_table.c.formatversion==FormatVersion).\
filter(formats_table.c.formatmimetype==FormatMIMEType)

したがって、参照されている「引数」は、渡されるキーワード引数filterです。Ubuntuのバージョンに同梱されているSQLAlchemyのバージョンでは1つしか持てず、4つ提供します。表示されない他の引数はself、インスタンス メソッドを呼び出すときに自動的に渡されるインスタンス オブジェクト (通常は と呼ばれます) です。

于 2012-05-27T06:01:03.863 に答える