Python Ubuntu12.04上SQLAlchemy查询的TypeError,但Windows上没有

Python Ubuntu12.04上SQLAlchemy查询的TypeError,但Windows上没有,python,windows,ubuntu,sqlalchemy,Python,Windows,Ubuntu,Sqlalchemy,我有一个脚本,是我在windows机器上为Python2.7编写的。我让它在两台不同的机器上工作,所以我知道它可以“移动” 我现在正在设置一个ubuntu盒(v12.04) 同样的代码在ubuntu中失败: instance = session.query(formats_table).\ filter(formats_table.c.formatid==FormatID, formats_table.c.puid==PUID, formats_table.c.f

我有一个脚本,是我在windows机器上为Python2.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)
TypeError:()正好接受2个参数(给定5个)
我能做些什么来找出哪里出了问题


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

您有两种不同版本的SQLAlchemy

过滤器(*标准)

使用SQL表达式将给定的筛选条件应用于此查询的副本

e、 g:
session.query(MyClass).filter(MyClass.name=='some name')

多个标准通过和连接在一起(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)

因此,所引用的“参数”是传递给
过滤器的关键字参数--Ubuntu版本附带的SQLAlchemy版本中只能有一个,并且提供了四个。您没有看到的另一个参数是实例对象(通常称为
self
),它在您调用实例方法时自动传递。

回溯是什么样子的?很好,谢谢。这有点烦人-我今天从apt get获得了sqlal-我必须看看是否能找到更新的版本-修复了上面的问题后,它现在在sqlal的另一部分上失败了。感谢您抽出时间,谢谢。@JayGattuso;你可以看看到底有什么不同,但是新增功能的数量似乎相当少,所以你不需要做太多的更改。哦,好吧,直到我专门下载了它,它才起作用。谢谢你,我将进行一次探索——我是Ubuntu的新手,所以这是一个学习曲线!。谢谢