Python - NoSQL数据库

2025年3月13日 | 阅读6分钟

数据库通常是指一种已准备好的信息集合,可以使用各种库和模块轻松地访问、管理和更新。Python 提供了接口来连接各种类型的数据库,包括关系型数据库(例如 SQLite、MySQL、PostgreSQL)和 NoSQL 数据库(例如 MongoDB、Redis)。

在接下来的教程中,我们将学习 Python 中使用的 NoSQL 数据库。我们将探讨可以使用这些数据库执行的不同操作以及更多内容。

那么,让我们开始吧。

什么是 NoSQL 数据库?

NoSQL 是一种数据库设计方法,允许数据存储和查询超出关系数据库中传统结构。它们旨在处理海量的各种统计数据类型,并针对各种数据模型进行优化,例如键值对、文档、列族和图。NoSQL 数据库特别适用于现代互联网应用程序、大数据分析和实时处理。

NoSQL 数据库的关键特性

以下是 NoSQL 数据库的一些关键特征:

  1. 无模式设计: NoSQL 数据库通常不需要固定模式,从而允许更灵活和敏捷的数据模型。这对于数据需求不断变化的应用程序非常有用。
  2. 可伸缩性: 它们通过将数据分布在多台服务器上来实现水平伸缩,从而能够处理大型数据集和高吞吐量。
  3. 高性能: NoSQL 数据库针对读写操作进行了优化,可以高效地处理大量事务。
  4. 分布式架构: 许多 NoSQL 数据库都采用分布式结构构建,提供容错性和高可用性。
  5. 各种数据模型
    1. 键值存储: 数据以键值对的形式存储(例如,Redis)。
    2. 文档存储: 数据以文档格式保存,通常是 JSON 或 BSON(例如,MongoDB)。
    3. 列族存储: 数据以行和列的形式存储,但按列族分组(例如,Cassandra)。
    4. 图数据库: 数据以节点和边表示关系(例如,Neo4j)。

NoSQL 数据库的一些示例包括:

  1. MongoDB: MongoDB 是一种流行的文档存储,使用类似 JSON 的文档。
  2. Redis: Redis 是一种内存键值存储,常用于缓存和实时分析。
  3. Cassandra: Cassandra 是一种分布式列族存储,非常适合处理大量结构化数据。

使用 Python 在 NoSQL 数据库中执行基本操作

现在我们将看一些使用 Python 在 NoSQL 数据库中执行的基本操作。

创建(插入)

在 MongoDB 等 NoSQL 数据库中插入文档会添加一条新记录,通常不需要预定义模式。使用 Python 的 `pymongo`,`insert_one` 方法可以存储文档并返回其唯一的 `_id`。

语法

Python - MongoDB

Python - Redis

读取(查询)

读取文档涉及根据字段进行查询,返回单个或多个文档。`pymongo` 中的 `find_one` 或 `find` 方法用于根据过滤器检索文档。

语法

Python - MongoDB

Python - Redis

更新

更新文档会修改现有记录中的一个或多个字段。`update_one` 或 `update_many` 方法允许部分更新或替换字段,同时保留其他数据。

语法

Python - MongoDB

Python - Redis

删除

删除文档会将其从集合中移除。`delete_one` 或 `delete_many` 允许您删除与过滤器匹配的记录,从而释放数据库空间。

语法

Python - MongoDB

Python - Redis

批量插入

批量插入允许您在一次操作中插入多个文档,从而提高大型数据加载的性能。在 Python 中,通常使用 `insert_many` 方法进行批量插入。

语法

Python - MongoDB

索引

索引通过创建结构来提高查询性能,该结构允许在指定字段上进行更快的搜索。使用 `pymongo` 中的 `create_index`,您可以索引 `name` 或 `email` 等字段以优化查询。

语法

Python - MongoDB

聚合 (Aggregation)

聚合执行复杂的数据操作,例如分组或计算总数。在 MongoDB 中,使用包含阶段(例如 `$match`、`$group`)的管道的 `aggregate` 允许跨集合分析和转换数据。

语法

Python - MongoDB

交易

事务可确保多个操作要么完全完成,要么根本不完成,从而维护数据完整性。在 Python 中,可以在副本集或分片集群内以原子方式执行带有 `pymongo` 的事务。

语法

Python - MongoDB

TTL(生存时间)

TTL 会在指定时间后自动删除文档,通常用于过期数据(如会话)。通过在时间戳字段上创建 TTL 索引,文档将在其时间限制到达后自动删除。

语法

Python - MongoDB

所有操作的示例

输出

 
Document inserted with _id: ObjectId('65298743cfbd553f2e384d7c')
{
    '_id': ObjectId('65298743cfbd553f2e384d7c'),
    'name': 'Shruthi',
    'age': 23,
    'city': 'Karimnagar',
    'created_at': datetime.datetime(2024, 10, 14, 12, 0, 0)
}
Documents matched: 1, updated: 1
Documents deleted: 1
Bulk insert successful. Inserted IDs: [
    ObjectId('65298743cfbd553f2e384d7e'), 
    ObjectId('65298743cfbd553f2e384d7f'), 
    ObjectId('65298743cfbd553f2e384d80')
]
Index created: name_1
[{'_id': 'Delhi', 'total': 30}]
Transaction committed successfully.
TTL index created. Documents will expire after 10 seconds.   

NoSQL 数据库的一些优点和缺点

以下是使用 NoSQL 数据库存储数据的一些主要优点:

  1. 可伸缩性: NoSQL 数据库设计用于水平伸缩,非常适合管理海量数据和高吞吐量。
  2. 灵活性: 它们提供模式灵活性,允许动态和敏捷的数据模型,可以适应各种数据类型和不断变化的需求。
  3. 性能: NoSQL 数据库针对特定用例进行了优化,在读写操作(尤其是在分布式环境中)方面提供高性能。
  4. 容错性: 许多 NoSQL 数据库支持复制和分片,提供容错性和高可用性,以确保数据完整性和可靠性。
  5. 水平分区: 它们支持水平分区,将数据分布在多个节点上以提高性能和可靠性。

以下是使用 NoSQL 数据库存储数据的一些缺点:

  1. 有限的查询功能: 与 SQL 数据库相比,NoSQL 数据库的查询功能可能有限,导致复杂查询难以执行。
  2. 最终一致性: 一些 NoSQL 数据库优先考虑可用性和分区容错性而非强一致性,导致最终一致性和潜在的数据不一致。
  3. 缺乏事务: 许多 NoSQL 数据库缺乏完整的 ACID 事务,这可能使维护数据完整性和执行复杂的业务规则变得困难。
  4. 学习曲线: 从 SQL 迁移到 NoSQL 可能需要学习新的数据建模策略和查询语言,导致开发人员的学习曲线更陡峭。
  5. 成熟度和工具: 一些 NoSQL 数据库不如 SQL 数据库成熟,导致工具、文档和社区支持较少。