为什么我没有从使用编码数据库中得到 SQL 查询的结果?
Why am I not getting results of SQL query back from using encode databases?
我有以下内容,但出于某种原因,我没有得到我的查询结果,而是得到了其他东西
这是我正在使用的 Python 包
这是文档
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'>
如何 return SQL 查询的实际结果return 来自查询的所有行?
我真正想做的事
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.Record
是 collections.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: 单一结果(来自评论)
如果你执行单个查询,你应该能够print/convert如下所示:
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'}
我有以下内容,但出于某种原因,我没有得到我的查询结果,而是得到了其他东西
这是我正在使用的 Python 包
这是文档
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'>
如何 return SQL 查询的实际结果return 来自查询的所有行?
我真正想做的事
here is
sqlalchemy
version that works but usingdatabases
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.Record
是 collections.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: 单一结果(来自评论)
如果你执行单个查询,你应该能够print/convert如下所示:
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'}