如何在Python中使用MongoDB?了解如何使用 pymongo 驱动程序模块在 Python 中连接到 MongoDB 数据库、列出数据库、集合、将数据插入到集合中、从集合中获取数据等,并结合相关的Python使用MongoDB示例。
MongoDB是一个跨平台的面向文档的数据库。它被归类为NoSQL数据库,因为它将数据存储在灵活的、类似 JSON 的文档中,这意味着字段可以因文档而异,并且数据结构可以随着时间的推移而改变。
Python如何使用MongoDB?与将数据存储在表中的MySQL等关系数据库不同,MongoDB 以BSON格式将数据存储在集合中,这是JSON的二进制序列化,代表“二进制 JSON”,你可以用 JSON 做任何事情,你可以用 BSON 做好吧,但带有不属于 JSON 的其他扩展,例如Date
和BinData
数据类型。
相关:
如何在 Python 中使用 JSON 文件。
选择 MongoDB 而不是 SQL 数据库的原因有很多,包括:
- 充分利用云计算和存储
- 灵活性
- 加速发展
- 它是一个分布式数据库,因此内置了高可用性、水平扩展和地理分布,并且易于使用。
- 入门
- 连接到 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
主机和27017
MongoDB的默认端口相同。请注意,这还不会建立任何连接,它只会在你执行任何操作(例如获取服务器信息)时进行。如果你想得到一些关于服务器的信息,你可以使用
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 语言一样灵活!
推荐阅读
- 如何在Python中使用MySQL数据库(用法示例教程)
- Python如何使用Celery、Redis和Flask构建同步和异步任务()
- 如何在Python中自动化VPS或专用服务器管理()
- android项目 之 记事本(13) ----- 查看图片及播放录音
- android AsyncTask使用
- Android 正则表达式验证手机号姓名(包含少数民族)身份证号
- 移动APP测试用例设计实践经验(转载)
- 微信app支付android客户端以及.net服务端实现
- App开发定制前需要做哪些规划()