SQLAlchemy 中 class sqlalchemy.engine.Result 的成员函数的应用

Python·SQLAlchemy · 20 天前

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')

这些方法为从数据库中提取和操作结果提供了一系列灵活的工具集,可以根据需要选择适当的方法达到最佳的数据处理效率。

Theme Jasmine by Kent Liao