python - 为什么我没有从使用编码数据库中得到 SQL 查询的结果?

我有以下内容,但出于某种原因,我没有得到我的查询结果,而是得到了其他东西

这是我正在使用的 Python 包

https://pypi.org/project/databases/

这是文档

https://www.encode.io/databases/database_queries/

from databases import Database
database=Database('postgres://redacted')
await database.connect()
...
...
...
query = "SELECT orders.id AS orders_id, orders.notification_method AS orders_notification_method WHERE shipped=True"
result = await database.fetch_all(query=query))

这是我得到的而不是得到我的查询结果

print(result)

[<databases.backends.postgres.Record object at 0x7fb3f415ac50>, <databases.backends.postgres.Record object at 0x7fb3f415ae30>, <databases.backends.postgres.Record object at 0x7fb3f415a470>, <databases.backends.postgres.Record object at 0x7fb3f415af50>, <databases.backends.postgres.Record object at 0x7fb3f415ad70>, <databases.backends.postgres.Record object at 0x7fb3f415ab30>, <databases.backends.postgres.Record object at 0x7fb3f415a7d0>, <databases.backends.postgres.Record object at 0x7fb3f415ae90>]

输入的是一个列表

print(type(result))

<class 'list'>

如何返回 SQL 查询的实际结果,即返回查询中的所有行?

我真正想做的事

here is sqlalchemy version that works but using databases package not working as mentioned above

我非常想实现的是像下面这样从 sqlalchemy 查询中获得类似的结果,并且能够迭代查询结果中的行

...
...
...
class Orders:
    id: Optional[int]
    notification_method: str
    shipped: Optional[bool]

...
...
...
session = create_session()
result=session.query(Orders).filter(Orders.shipped == True)

print(result)

SELECT orders.id AS orders_id, orders.notification_method AS orders_notification_method FROM orders 
WHERE orders.shipped = true

print(type(result))

<class 'sqlalchemy.orm.query.Query'>

然后我希望能够遍历行

for r in result:
    print(r)

output

Orders(id=1, notification_method='call', shipped=True)
Orders(id=2, notification_method='sms', shipped=True)
Orders(id=3, notification_method='call', shipped=True)

只是想得到与这个 sqlalchmey 类似的结果,但是使用这个问题开头提到的 databases

最佳答案

databases.backends.postgres.Recordcollections.abc.Mapping 的子类.

它确实包含查询执行的结果(“实际结果”)。 为了“提取”值,您可以执行以下操作:

result = await database.fetch_all(query=query))
for rec in result:
    print(tuple(rec.values())  # or you could use `dict(rec.items())` as well

Edit-1:单一结果(来自评论)

如果您执行单个查询,您应该能够按以下方式打印/转换:

rec = await database.fetch_one(query=query)
print(rec)
print(tuple(rec.values()))
print(dict(rec.items()))

结果类似于:

<databases.backends.postgres.Record object at 0x??????>
(1, 'sms')
{'orders_id': 1, 'orders_notification_method': 'sms'}

https://stackoverflow.com/questions/67553888/

相关文章:

amazon-web-services - 为什么 X-Forwarded-Proto 在 Elas

java - 如果读取字节数为 0,是否有任何理由继续读取 InputStream?

python - 如何减少 PyQt5 QGridLayout 中两个小部件之间的空间?

sql - 如何计算运行平均值

r - 为什么 geom_smooth 不绘图? (唯一值不足错误)

kubernetes - 如何将 kubernetes 的一个 secret 值复制到同一 name

python - 无法使用 pytesseract.image_to_string 从图像中读取文本

python - 检查是否存在与列表中的字符串匹配的子字符串

haskell - 在 haskell 中给 `_` 一个类型签名

visual-studio-code - 代码行数旁边的竖线是什么