Python namedtuple中的查询,属性错误
使用Python namedtuple中的查询,属性错误,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,使用namedtuple时,我正在尝试将查询放入其中 build = namedtuple('build', 'x y z') build(x=DB.query(x).filter(x.id == 'query').first(), y=DB.query(y).filter(y.id == 'query').first(), z=DB.query(z).filter(z.id == 'query').first()) 当我实际尝试使用print build.x.id访问
namedtuple
时,我正在尝试将查询放入其中
build = namedtuple('build', 'x y z')
build(x=DB.query(x).filter(x.id == 'query').first(),
y=DB.query(y).filter(y.id == 'query').first(),
z=DB.query(z).filter(z.id == 'query').first())
当我实际尝试使用print build.x.id
访问x
时,我得到:
AttributeError: 'property' object has no attribute 'id'
我认为这与在namedtuple中有一个查询有关,我只是做错了,或者它不是为了这样做而设计的。我在谷歌上搜索过,没有看到太多关于这方面的内容。找到了一个不使用
命名双倍的解决方案,因为我认为这不适合我的用例(即,我认为它不支持嵌套的dicts/对象,而不需要融资)
发现这个问题,并决定调整我的代码以使用它
build = {'x': DB.query(x).filter(x.id == 'query').first()}
build = bunchify(build)
现在我可以这样做了
>>> print build.x.id
27
天衣无缝
简单总比复杂好。试试:print build.x['id']
也试过了。获取此错误:TypeError:“property”对象没有属性“\uu getitem\uuuu”
我认为这与namedtuple
没有任何关系(但可能);你能给我们介绍一下DB
到底是什么吗?看起来你在build
中投入的东西实际上并不是你想象的那样。可能应该注意到,但我认为这是假设的,因为我把pyramid
作为一个标签。我使用的是sqlalchemy
,因此x
的查询结果通常类似于
,我可以在其中,打印x.id
,然后我会得到一个整数。您的示例代码与您在实际程序中使用的代码完全一样吗?询问,因为我可以毫无问题地运行您的代码。