我有一个脚本,我在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),这表明括号没有被正确解析?
答案 0 :(得分:3)
你有两个不同版本的SQLAlchemy。
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
)。