首页 > 解决方案 > 从 SQLalchemy 查询对象访问数据?

问题描述

我在 python 中使用以下命令查询我的数据库:

self.deleted_packages = model.Session.query(
            model.Package).filter_by(state=model.State.DELETED)

我正在访问 pkg 中的上述值,如下所示:

for pkg in self.deleted_packages: 

pkg 中的输出为:

<Package id=563e0da3-6916-4158-bc9f-f11bf92d3240 
 name=asdacaasas 
 title=asdacaasas 
 version= url= author= author_email= maintainer= maintainer_email= notes= 
 license_id=cc-by 
 type=dataset
 owner_org=9b89900e-c4b8-413d-a8fe-edbe08641022 
 creator_user_id=30ad2d1c-f133-4458-9947-535e2718a898 
 metadata_created=2019-05-21 13:08:52.322015 
 metadata_modified=2019-05-21 13:08:59.946710 
 private=True 
 state=deleted 
 revision_id=5251e583-3a71-4189-8d4e-aaac8ac69927>

我只需要变量中的包 id。当我尝试执行以下操作时: p1=[x[0] for x in pkg]

我收到以下错误:

p1=[x[0] for x in pkg]
TypeError: 'Package' object is not iterable

有人知道我如何将 id: 的值存储在563e0da3-6916-4158-bc9f-f11bf92d3240上述查询结果的变量中。?

标签: pythonsqlalchemy

解决方案


您应该阅读SQLalchemy的文档(我从评论中得到了这个上下文)。

有一些示例可以突出您如何解决您的问题。

此答案中链接的文档中的一个示例(与您的确切情况无关!):

>>> for row in session.query(User, User.name).all():
...    print(row.User, row.name)

输出为:

<User(name='ed', fullname='Ed Jones', nickname='eddie')> ed
<User(name='wendy', fullname='Wendy Williams', nickname='windy')> wendy
<User(name='mary', fullname='Mary Contrary', nickname='mary')> mary
<User(name='fred', fullname='Fred Flintstone', nickname='freddy')> fred

因此,在您的情况下,pkg变量(Package类的对象)可能类似于User上面示例中的对象,并且name内容由row.name.

所以你的案子可能有类似的东西pkg.id


推荐阅读