2012-05-27 31 views
2

SQLAlchemy的查询我有一个脚本,我为Python 2.7在Windows中写道。我让它在几台不同的机器上工作,所以我知道它'移动'确定。类型错误在Ubuntu 12.04而不是在Windows

我现在建立一个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)和(过滤器),这表明该支架没有被正确解析?

+1

什么是回溯的样子? – icktoofay

回答

3

你有两个不同版本的SQLAlchemy的。

SQLAlchemy's filter method:

filter(*criterion)

应用给过滤标准来此查询的副本,使用SQL表达式。

例如: 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呼叫链接到g等效果。在你的情况,这将是这样的:

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关键字参数 - 你只能有一个在SQLAlchemy的版本附带你的Ubuntu版本,并提供四个。您没有看到的另一个参数是实例对象(通常称为self),当您调用实例方法时它会自动传递。

+0

完美,谢谢。这有点烦人 - 我今天从apt-get获得了sqlal - 我必须看看我能否找到更新的版本 - 修正了上述问题后,现在它在sqlal的另一部分上失败了。我感谢你的时间,谢谢。 –

+1

@JayGattuso [Ubuntu 12.04自带SQLAlchemy 0.7.4](https://launchpad.net/ubuntu/precise/+package/python-sqlalchemy);你可以看看[0.7.5的更新日志](http://www.sqlalchemy.org/changelog/CHANGES_0_7_5),看看究竟有什么不同,但功能添加的数量看起来相当低,所以你不应该“不得不改变很多。 – agf

+0

噢,好的 - 直到我专门下载它时,它才工作。谢谢,我将探讨一下 - 我是Ubuntu的新手,因此它有点像学习曲线!谢谢。 –