从SQLalchemy查询对象访问数据?

时间:2019-05-21 13:37:23

标签: python 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的值存储在上述查询结果的变量中??

1 个答案:

答案 0 :(得分:1)

您应该阅读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