Python Ubuntu12.04上SQLAlchemy查询的TypeError,但Windows上没有
我有一个脚本,是我在windows机器上为Python2.7编写的。我让它在两台不同的机器上工作,所以我知道它可以“移动” 我现在正在设置一个ubuntu盒(v12.04) 同样的代码在ubuntu中失败: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
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的新手,所以这是一个学习曲线!。谢谢