如何在Python中使用MongoDB数据库(用法示例教程)

如何在Python中使用MongoDB?了解如何使用 pymongo 驱动程序模块在 Python 中连接到 MongoDB 数据库、列出数据库、集合、将数据插入到集合中、从集合中获取数据等,并结合相关的Python使用MongoDB示例。
MongoDB是一个跨平台的面向文档的数据库。它被归类为NoSQL数据库,因为它将数据存储在灵活的、类似 JSON 的文档中,这意味着字段可以因文档而异,并且数据结构可以随着时间的推移而改变。
Python如何使用MongoDB?与将数据存储在表中的MySQL等关系数据库不同,MongoDB 以BSON格式将数据存储在集合中,这是JSON的二进制序列化,代表“二进制 JSON”,你可以用 JSON 做任何事情,你可以用 BSON 做好吧,但带有不属于 JSON 的其他扩展,例如DateBinData数据类型。
相关:  如何在 Python 中使用 JSON 文件。
选择 MongoDB 而不是 SQL 数据库的原因有很多,包括:

  • 充分利用云计算和存储
  • 灵活性
  • 加速发展
  • 它是一个分布式数据库,因此内置了高可用性、水平扩展和地理分布,并且易于使用。
这是我们将在本教程中介绍的内容:
  • 入门
  • 连接到 MongoDB 数据库
  • 列出数据库
  • 访问数据库
  • 列出数据库中的所有集合
  • 插入文件
  • 获取文件
  • 删除文档
  • 删除集合
  • 删除数据库
入门首先,你需要在你的机器上安装 MongoDB,  我强烈建议你查看官方的 MongoDB 安装指南,你需要按照你的操作系统的步骤进行操作。
其次,你需要安装 MongoDB Python 驱动程序:pymongo:
pip3 install pymongo

如何在Python中使用MongoDB?如果你只是通过pip安装pymongo,那么你就可以开始使用了,最新版本的pymongo支持所有 MongoDB 数据库版本。
最后,你需要使用以下命令启动 MongoDB 守护进程:
$ mongod

连接到 MongoDB 数据库Python如何使用MongoDB?安装 MongoDB 并使用mongod命令启动 Mongo 守护程序后,以下代码负责连接到数据库:
from pymongo import MongoClient from pprint import pprint# connect to the MongoDB server client = MongoClient() # or explicitly # client = MongoClient("localhost", 27017)

不传递参数与指定localhost主机和27017MongoDB的默认端口相同。请注意,这还不会建立任何连接,它只会在你执行任何操作(例如获取服务器信息)时进行。
如果你想得到一些关于服务器的信息,你可以使用client.server_info()方法。
列出数据库Python使用MongoDB示例:让我们获取 MongoDB 服务器中可用的所有数据库:
# list all database names print("Available databases:", client.list_database_names())

这只会输出数据库的名称,client.list_databases()如果你想获取有关数据库的一些信息(例如磁盘大小),可以使用方法,这是我的输出:
Available databases: [ 'admin', 'config', 'db', 'local', 'mydb']

如果你的输出与我的不同,请不要担心,我使用 MongoDB 有一段时间了,可以肯定的是,我在那里做了很多工作。
访问数据库要访问特定的数据库,我们可以通过将其作为属性或 Python 的字典样式来访问:
# access the database "python", this will create the actual database # if it doesn't exist database = client[ "python"] # or this: # database = client.python

请注意,该数据库不存在,一旦我们创建一个集合(如 SQL 中的表)并插入一个文档,它就会自动创建。
使用数据库列出所有集合Python如何使用MongoDB?集合是 MongoDB 中表的术语。要获取此数据库中的所有集合,我们只需使用database.list_collection_names()方法:
# list all collections print("Available collections:", database.list_collection_names())

【如何在Python中使用MongoDB数据库(用法示例教程)】这是我的输出:
[ ]

并不奇怪,因为这是一个新数据库,我们还没有创建任何集合。你还可以使用database.list_collections()方法来获取每个集合以及一些信息。
插入文件如何在Python中使用MongoDB?MongoDB 中的文档就像关系数据库中的一行。为了演示,让我们制作书籍收藏并在其中插入书籍:
# get books collection (or create one) books = database[ "books"] # insert a single book result = books.insert_one({ "name": "Invent Your Own Computer Games with Python, 4E", "author": "Al Sweigart", "price": 17.99, "url": "https://amzn.to/2zxN2W2" })

Python使用MongoDB示例:我们已经检索了书籍集合(或者如果它不存在则创建它)并使用books.insert_one()方法插入单个文档,我们只是传递了一个 Python 字典。
让我们获取插入元素的 ID:
print("One book inserted:", result.inserted_id)

输出:
One book inserted: 5ee79b10c6bd9552e204a625

MongoDB 的一个很棒的特性,它会自动为每个插入的元素生成一个唯一的 ID,我们稍后会再次看到它。
现在如果我们想一次插入多个文档怎么办?我们简单地使用insert_many()方法而不是insert_one()
# insert many books books_data = https://www.lsbin.com/[ {"name": "Automate the Boring Stuff with Python: Practical Programming for Total Beginners", "author": "Al Sweigart", "price": 17.76, "url": "https://amzn.to/2YAncdY" }, { "name": "Python Crash Course: A Hands-On, Project-Based Introduction to Programming", "author": "Eric Matthes", "price": 22.97, "url": "https://amzn.to/2yQfQZl" }, { "name": "MySQL for Python", "author": "Albert Lukaszewski", "price": 49.99, } ] result = books.insert_many(books_data) print("Many books inserted, Ids:", result.inserted_ids)

我们一次性插入了 3 个文档,注意最后一本书没有url字段,MongoDB 也没有抱怨,因为这是允许的!
这是我的输出:
Many books inserted, Ids: [ ObjectId('5ee79c4fc6bd9552e204a62c'), ObjectId('5ee79c4fc6bd9552e204a62d'), ObjectId('5ee79c4fc6bd9552e204a62e')]

获取文件Python如何使用MongoDB?MongoDB 的神奇之处在于我们可以使用 Python 字典过滤文档,让我们获取特定作者的一本书:
# get a single book by a specific author eric_book = books.find_one({"author": "Eric Matthes"}) pprint(eric_book)

输出:
{'_id': ObjectId('5ee79c10c6bd9552e204a627'), 'author': 'Eric Matthes', 'name': 'Python Crash Course: A Hands-On, Project-Based Introduction to ' 'Programming', 'price': 22.97, 'url': 'https://amzn.to/2yQfQZl'}

输出也是一个 Python 字典,让我们获取 Al Sweigart 的所有书籍:
# get all books by a specific author sweigart_books = books.find({"author": "Al Sweigart"}) print("Al Sweigart's books:") pprint(list(sweigart_books))

请注意,我将结果包装在一个list()函数中以将其作为字典列表检索,这是因为find()方法返回一个pymongo.cursor.Cursor()实例,你可以在其中使用 for 循环对其进行迭代,或者使用list()函数将其包装起来。这是预期的输出:
[ {'_id': ObjectId('5ee79b10c6bd9552e204a625'), 'author': 'Al Sweigart', 'name': 'Invent Your Own Computer Games with Python, 4E', 'price': 17.99, 'url': 'https://amzn.to/2zxN2W2'}, {'_id': ObjectId('5ee79c10c6bd9552e204a626'), 'author': 'Al Sweigart', 'name': 'Automate the Boring Stuff with Python: Practical Programming for ' 'Total Beginners', 'price': 17.76, 'url': 'https://amzn.to/2YAncdY'}, {'_id': ObjectId('5ee79c34c6bd9552e204a629'), 'author': 'Al Sweigart', 'name': 'Automate the Boring Stuff with Python: Practical Programming for ' 'Total Beginners', 'price': 17.76, 'url': 'https://amzn.to/2YAncdY'}, {'_id': ObjectId('5ee79c4fc6bd9552e204a62c'), 'author': 'Al Sweigart', 'name': 'Automate the Boring Stuff with Python: Practical Programming for ' 'Total Beginners', 'price': 17.76, 'url': 'https://amzn.to/2YAncdY'}]

最后,如果你想在没有任何过滤器的情况下获取所有文档,你可以简单地将一个空字典传递给find()方法:
# get all documents in books collection all_books = books.find({}) print("All books:") pprint(list(all_books))

删除文档如何在Python中使用MongoDB?要删除特定文档,你只需使用delete_one()方法,这是一个示例:
# delete a specific document by a JSON query result = books.delete_one({"author": "Albert Lukaszewski"})

即使有多个文档使用该过滤器,它仍会删除单个文档。如果要使用该过滤器删除所有文档,请使用delete_many()方法:
# delete all books by Al Sweigart result = books.delete_many({"author": "Al Sweigart"})

删除集合Python使用MongoDB示例:要删除 MongoDB 中的集合,你有两个选择:
# drop this collection database.drop_collection("books") # or this: # books.drop()

这将删除books集合。
删除数据库
# drop this entire database client.drop_database("python") # close the connection client.close()

Python如何使用MongoDB?drop_database() 顾名思义,它删除给定参数中的名称的数据库。
最后,我们使用close()方法关闭连接。
结论现在你了解了 MongoDB 及其 Python 驱动程序pymongo的基本功能。我鼓励你使用它来熟悉数据库,它和 Python 语言一样灵活!

    推荐阅读