class sqlalchemy.engine.Result
有这些成员函数:
all(), close(), closed, columns(), fetchall(), fetchmany(), fetchone(), first(), freeze(), keys(), mappings(), merge(), one(), one_or_none(), partitions(), scalar(), scalar_one(), scalar_one_or_none(), scalars(), t, tuples(), unique(), yield_per()
SQLAlchemy 是一个广泛使用的 Python ORM(对象关系映射)库,它允许开发者通过 Python 对数据库进行高效的操作。sqlalchemy.engine.Result
类提供了从查询中提取数据的方法。以下是这些成员函数的用处及使用示例:
1. all()
返回所有行。
用法示例:
result = session.execute(select(User))
rows = result.all()
示例结果:
[(1, 'Alice'), (2, 'Bob')]
2. close()
关闭结果集,使其不能再提取更多行。
用法示例:
result = session.execute(select(User))
result.close()
示例结果:
# 无输出。结果集被关闭。
3. closed
检测结果集是否已关闭。
用法示例:
result = session.execute(select(User))
print(result.closed)
示例结果:
False
4. columns()
取得结果集的列元数据对象。
用法示例:
result = session.execute(select(User))
print(result.columns(User.id, User.name))
示例结果:
ColumnCollection(User.id, User.name)
5. fetchall()
获取所有行。这是所有方法的快捷方式之一。
用法示例:
result = session.execute(select(User))
rows = result.fetchall()
示例结果:
[(1, 'Alice'), (2, 'Bob')]
6. fetchmany(size)
获取指定数量的行。
用法示例:
result = session.execute(select(User))
rows = result.fetchmany(size=1)
示例结果:
[(1, 'Alice')]
7. fetchone()
获取单行。每次调用都会向前读取一行。
用法示例:
result = session.execute(select(User))
row = result.fetchone()
示例结果:
(1, 'Alice')
8. first()
获取第一行,如果存在的话。
用法示例:
result = session.execute(select(User))
row = result.first()
示例结果:
(1, 'Alice')
9. freeze()
冻结结果集,以供后续不同上下文中使用。
用法示例:
result = session.execute(select(User))
frozen_result = result.freeze()
示例结果:
# 无直接输出,结果集被冻结以便以后使用。
10. keys()
返回列名列表。
用法示例:
result = session.execute(select(User))
print(result.keys())
示例结果:
['id', 'name']
11. mappings()
返回每一行的映射对象。
用法示例:
result = session.execute(select(User))
mappings = result.mappings().all()
示例结果:
[{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
12. merge()
将结果集合并到现有对象实例中。
用法示例:
existing_user = session.query(User).get(1)
new_data = {'name': 'Alice Updated'}
result = session.execute(User.update().where(User.id == 1).values(**new_data))
merged_user = result.merge(existing_user)
示例结果:
# 无直接输出。`merged_user` 将有更新的数据。
13. one()
获取唯一一行,如果存在多个或者没有则抛出异常。
用法示例:
result = session.execute(select(User).where(User.id == 1))
row = result.one()
示例结果:
(1, 'Alice')
14. one_or_none()
获取唯一一行或者无行时返回 None。
用法示例:
result = session.execute(select(User).where(User.id == 1))
row = result.one_or_none()
示例结果:
(1, 'Alice')
15. partitions()
提供分区结果集,用于分批处理大数据集。
用法示例:
result = session.execute(select(User))
for partition in result.partitions(size=1):
print(partition)
示例结果:
[(1, 'Alice')]
[(2, 'Bob')]
16. scalar()
获取第一行的第一个列值。
用法示例:
result = session.execute(select(User.name))
name = result.scalar()
示例结果:
'Alice'
17. scalar_one()
获取唯一一行的第一个列值,如果存在多个或者没有则抛出异常。
用法示例:
result = session.execute(select(User.name).where(User.id == 1))
name = result.scalar_one()
示例结果:
'Alice'
18. scalar_one_or_none()
获取唯一一行的第一个列值,否则返回 None。
用法示例:
result = session.execute(select(User.name).where(User.id == 1))
name = result.scalar_one_or_none()
示例结果:
'Alice'
19. scalars()
返回第一列的所有值。
用法示例:
result = session.execute(select(User.name))
names = result.scalars().all()
示例结果:
['Alice', 'Bob']
20. t
包装在一个塑形属性上的一行结果。
用法示例:
# 并没有普遍使用的示例。
21. tuples()
返回每一行作为一个元组。
用法示例:
result = session.execute(select(User))
tuples = result.tuples().all()
示例结果:
[(1, 'Alice'), (2, 'Bob')]
22. unique()
返回唯一一组结果。
用法示例:
result1 = session.execute(select(User.id).where(User.name == 'Alice'))
result2 = session.execute(select(User.id).where(User.name == 'Bob'))
unique_result = result1.unique().tuples().all()
示例结果:
# 无直接输出。用于内存中唯一化结果集。
23. yield_per()
使用指定的批大小,在迭代器接口上返回结果。
用法示例:
result = session.execute(select(User))
for user_chunk in result.yield_per(1):
print(user_chunk)
示例结果:
(1, 'Alice')
(2, 'Bob')
这些方法为从数据库中提取和操作结果提供了一系列灵活的工具集,可以根据需要选择适当的方法达到最佳的数据处理效率。