CouchDB 教程:使用 Python 进行 CRUD 操作

CouchDB 是由 Apache 软件基金会开发的开源文档型NoSQL数据库,被苹果、GenCorp 技术和富国银行等大公司使用。CouchDB 与 MongoDB 类似,使用 JSON(JavaScript 对象表示法)存储数据,而 MongoDB 使用 BSON(二进制 JavaScript 对象表示法)存储数据。

与 MongoDB 相比,CouchDB 更为强大但同时也更简单,这使得它成为初学者学习和使用的不错选择。CouchDB 的更新机制是乐观的且无锁的。它实现了多版本并发控制,确保在执行写操作时不需要锁定数据库字段。CouchDB 可以轻松扩展,并提供了内置的、易于使用的复制机制,以在多台机器上的数据库之间同步数据。尽管 CouchDB 是一个文档型NoSQL数据库,但它遵循 ACID 属性,其中 A 代表原子性,C 代表一致性,I 代表隔离性,D 代表持久性。想要了解更多关于 ACID 属性的信息,请参考这篇文章。

本文将教如何在本地运行 CouchDB 并使用Python执行基本的CRUD操作。要在本地运行 CouchDB,可以从官方网站安装,也可以在 Docker 容器中运行。将详细解释后者。

首先,需要在 Windows 机器上安装 Docker。可以从 下载 Docker Desktop。安装过程相当简单直接。现在已经在机器上安装了 Docker,将尝试从 Docker Hub 获取 CouchDB 的官方镜像。可以在 查看官方 CouchDB 镜像。要获取 CouchDB 镜像,请在命令提示符上运行以下命令。

$ docker pull couchdb

完成此操作后,最后一步是使用刚刚从 Docker Hub 下载的 CouchDB 镜像启动一个容器。

$ docker run -p 5984:5984 -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password -d couchdb

-p 标签用于将本地端口连接到容器的端口,即 5984,因为它是 CouchDB 的默认端口。在创建容器时指定用户和密码凭证是 CouchDB 3 版本之后强制要求的;将使用默认凭证。

可以看到 CouchDB 容器正在运行。现在让将注意力转向编码部分。

将安装 CouchDBPython模块,这是 Python 的 CouchDB 客户端。它可以使用 pip 安装,就像安装任何其他 Python 模块一样。

$ pip install couchdb

现在已经准备好了,让深入编程部分。

在执行任何CRUD操作之前,首先需要连接到本地 CouchDB 数据库。如果正在运行 CouchDB 3 或更高版本,在连接到数据库时,指定用户凭证在 URL 中非常重要。

import couchdb server = couchdb.Server('http://admin:password@localhost:5984/') # 连接到本地服务器 server <Server 'http://127.0.0.1:5984/'>

现在已经连接到了数据库,让首先看看数据库操作。要创建一个新的数据库,使用 "create()" 函数,它接受要创建的数据库名称。下面的代码创建了一个名为 "sample_database" 的数据库。

db = server.create('sample_database') # 创建数据库

要使用现有的数据库,可以直接使用服务器对象通过将数据库名称指定为键来访问它。让尝试使用服务器对象访问上面创建的数据库。

server['sample_database'] # 访问现有数据库

可以使用 Python 中的 del 命令来删除现有数据库。它就像访问现有数据库一样,但是前面加上了 "del" 关键字。

del server['sample_database'] # 删除数据库

现在已经了解了如何创建、使用和删除数据库,让看看如何执行CRUD操作。首先,创建一个名为 "employee_info" 的数据库。

db = server.create('employee-info')

是时候将文档插入到刚刚创建的数据库中了。让插入一些包含员工详细信息的文档,包括他们的姓名、年龄、国家和他们知道的编程语言。新文档可以使用 "save" 命令插入到数据库中,它接受字典对象作为参数,并返回一个唯一的文档 ID 和修订号。

# 插入文档 db = server['employee-info'] employee_details_1 = { 'name': 'Vishnu', 'age': 22, 'country': 'India', 'programming_languages': ['python', 'C++', 'C#'] } employee_details_2 = { 'name': 'Sanjay', 'age': 21, 'country': 'India', 'programming_languages': ['C++', 'C#', 'javascript'] } employee_details_3 = { 'name': 'Arjun', 'age': 30, 'country': 'Germany', 'programming_languages': ['python', 'nodejs'] } doc_id, doc_rev = db.save(employee_details_1) db.save(employee_details_2) db.save(employee_details_3) doc_id, doc_rev ('0bba8f74f5974cb204d4270e6d000c14', '1-54ad9527cac88effa0545271cf3acb11')

现在已经将文档插入到数据库中,让尝试获取一个文档。文档可以使用返回的文档 ID 从数据库中获取,当文档被插入到数据库中时会返回文档 ID。

doc = db['0bba8f74f5974cb204d4270e6d000c14'] # 获取文档 doc['name'] 'Vishnu'

除了使用它们的唯一文档 ID 获取文档外,要在 CouchDB 中使用搜索查询,使用称为 mango 查询的东西,它类似于 mongo 查询。让看几个例子来看看这在行动中的样子。让尝试搜索所有年龄超过 23 的员工。

mango = {'selector': {'age': {'$gt':23}}} for i in db.find(mango): print(i)

如果熟悉 mongo 查询,相同的查询将适用于 MongoDB。正如前面提到的,mango 查询与 mongo 查询非常相似,具有 MongoDB 知识的人可以轻松使用 CouchDB,无需任何麻烦。现在让尝试找到名字为 "Sanjay" 的员工,但问题是只想获得他的姓名和年龄信息,而不是所有数据。

mango = {'selector': {'name':'Sanjay'}, 'fields': ['name', 'age']}

就像 fields 参数一样,find 函数还接受一个名为 "sort" 的键,可以用来对查询结果进行排序。

for i in db.find(mango): print(i) db['John'] = { 'name': 'John', 'age': 36, 'country': 'USA', 'programming_languages': ['java'] } db['John'] data = db['John'] data['age'] = 40 # 更新年龄 db['John'] = data db['John'] db.delete(db['John'])
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485