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)示例结果:
False4. 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')这些方法为从数据库中提取和操作结果提供了一系列灵活的工具集,可以根据需要选择适当的方法达到最佳的数据处理效率。