gpt4 book ai didi

python - Ubuntu 12.04 上 SQLAlchemy 查询的 TypeError 但 Windows 上没有

转载 作者:可可西里 更新时间:2023-11-01 10:07:58 26 4
gpt4 key购买 nike

我有一个我在 Windows 机器上为 python 2.7 编写的脚本。我让它在几台不同的机器上工作,所以我知道它可以“移动”。

我现在正在设置一个 ubuntu box (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),这表明括号没有被正确解析?

最佳答案

您有两个不同版本的 SQLAlchemy。

SQLAlchemy's filter method:

filter(*criterion)

apply the given filtering criterion to a copy of this Query, using SQL expressions.

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

Multiple criteria are joined together by AND (new in 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)。

关于python - Ubuntu 12.04 上 SQLAlchemy 查询的 TypeError 但 Windows 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com