栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法在SQLAlchemy烧瓶中的结果对象上设置属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法在SQLAlchemy烧瓶中的结果对象上设置属性

place_collections =Place.query.filter_by(county='BKK')
将返回您的
Place
对象集合。这类似于
session.query(Place).filter_by(county='BKK')
普通的香草SQLAlchemy。

但是,从SQLAlchemy
docs:

该查询还接受ORM插入的描述符作为参数。每当将多个类实体或基于列的实体表示为query()函数的参数时,返回结果均表示为元组

关键点是,当您指定要查询的特定列时,就像在此处所做的那样:

places = db.session.query(Place.roll_number, Place.name,    Place.website, Place.address, Place.distance).    outerjoin(Rank, Rank.place_id == Place.place_id)

结果表示为的集合

tuples

我的第一印象是

can't set attribute
从尝试向分配属性值时收到一条奇怪的错误消息
tuple
,所以我尝试了一下:

>>> t = tuple()>>> t.attribute = 9Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'tuple' object has no attribute 'attribute'

那不是您收到的错误消息。

因此,我执行了与您的第二个查询类似的查询(该模型只是我打开的项目中的内容):

>>> q = session.query(Racecard.id, Racecard.meeting)>>> a_result = q[0]>>> type(a_result)<class 'sqlalchemy.util._collections.result'>

是的,所以我们没有一个元组,而是一个

sqlalchemy.util._collections.result
对象。但..

>>> issubclass(type(a_result), tuple)True

所以,

sqlalchemy.util._collections.result
一个 类型
tuple

如果我们尝试为不是查询的列之一的属性分配值:

>>> a_result.newattribute = 'something'Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'result' object has no attribute 'newattribute'

该错误消息与将属性分配给Plain时获得的错误消息非常相似

tuple

那么,为什么会收到其他错误消息?该

result
对象实际上更像是
namedtuple

>>> from collections import namedtuple>>> Racecard = namedtuple('Racecard', 'id, meeting')>>> rc = Racecard(1, 'Doomben')>>> rc.meeting = 'Eagle Farm'Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: can't set attribute

这与您收到的错误消息相同。

因此,该

sqlalchemy.util._collections.result
对象支持对列名称的属性访问,但由于它
tuple
仍然是不可变的,因此您无法写入这些属性。

为了解决您的特定错误(除非出于某些原因,您仅专门查询那些列)将

places
查询更改为:

places = db.session.query(Place).outerjoin(Rank, Rank.place_id == Place.place_id)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638900.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号