【发布时间】:2025-12-04 02:55:02
【问题描述】:
我对 Python 很陌生,对 Pyramid 也很陌生(这是我用 Python 编写的第一件事),但在数据库查询方面遇到了麻烦...
我有以下模型(无论如何都与我的问题相关):
- MetadataRef(包含有关给定元数据类型的信息)
- 元数据(包含实际元数据)- 这是 MetadataRef 的子项
- 用户(包含用户)——这与元数据相关联。 MetadataRef.model = '用户' 和 metadata.model_id = user.id
我需要访问 MetadataRef 中的名称和 Metadata 中的值。
这是我的代码:
class User(Base):
...
_meta = None
def meta(self):
if self._meta == None:
self._meta = {}
try:
for item in DBSession.query(MetadataRef.key, Metadata.value).\
outerjoin(MetadataRef.meta).\
filter(
Metadata.model_id == self.id,
MetadataRef.model == 'User'
):
self._meta[item.key] = item.value
except DBAPIError:
#@TODO: actually do something with this
self._meta = {}
return self._meta
SQLAlchemy 正在生成的查询确实返回了我需要的内容(无论如何都足够接近——它需要查询 model_id 作为 ON 子句的一部分而不是 WHERE,但这是次要的,我很确定我自己可以解决这个问题):
SELECT metadata_refs.`key` AS metadata_refs_key, metadata.value AS metadata_value
FROM metadata_refs LEFT OUTER JOIN metadata ON metadata_refs.id = metadata.metadata_ref_id
WHERE metadata.model_id = %s AND metadata_refs.model = %s
但是,当我访问对象时,我得到了这个错误:
AttributeError: 'KeyedTuple' object has no attribute 'metadata_value'
这使我认为我需要通过其他方式访问它,但我不知道如何。我试过.value 和.metadata_value。 .key 确实按预期工作。
有什么想法吗?
【问题讨论】:
标签: python sqlalchemy pyramid