在Ubuntu 12.04上使用SQLAlchemy查询的TypeError,但在Windows上没有

时间:2012-05-27 04:52:59

标签: python windows ubuntu sqlalchemy

我有一个脚本,我在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)

我该怎么做才能找出问题所在?

我假设这行被解析为5个不同的参数,而不是两个(session.query)和(filter),这表明括号没有被正确解析?

1 个答案:

答案 0 :(得分:3)

你有两个不同版本的SQLAlchemy。

SQLAlchemy's filter method:

  

filter(*criterion)

     
    

使用SQL表达式将给定的过滤条件应用于此Query的副本。

         

例如为:     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之前,您在单个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版本中只能有一个,并且您提供了四个。您没有看到的另一个参数是在调用实例方法时自动传递的实例对象(通常称为self)。