python操作mongodb
在python当中,一般常用于开发中操作monoDB的模块无非三个:pymongo, mongoengine(相当于mysql中的sqlalchemy), moter
moter是python中基于pymongo实现的异步操作库,类似于aiomysql,aiomysql也是python基于pymysql实现的异步库。
mysql pymysql mysqlDB aiomysql[基于pymysql实现的异步库]
redis pyredis redis aioredis[基于pyredis实现的异步库]
mongo pymongo mongoengine[基于pymongo实现的ORM,高仿django的ORM] moter[基于pymongo实现的异步库]
PyMongo
安装:
pip install pymongo
数据库连接
数据库连接,无密码
import pymongo
mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
数据库连接,有密码
import pymongo
from urllib.parse import quote_plus
if __name__ == '__main__':
# 方式1:
username = quote_plus("yingmingapp") # 字符转移,防止出现多字节的字符,例如中文或者特殊符号
password = quote_plus("123456")
database = quote_plus("yingmingapp")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
print(mongo)
# 获取数据库操作对象
db = mongo[database]
print(db)
# 获取集合操作对象
collection = db["users"]
print(collection)
数据库管理
import pymongo
from urllib.parse import quote_plus
if __name__ == '__main__':
username = quote_plus("yingmingapp")
password = quote_plus("123456")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/yingmingapp")
print(mongo)
# 新建一个数据库
shop = mongo["shop"]
print(shop)
# 查看数据库列表[只会列出有文档数据的数据库]
print(mongo.list_database_names()) # 上面的 my_db 因为没有内容,所以没有被创建的。
print(mongo["yingmingapp"])
集合管理
import pymongo
from urllib.parse import quote_plus
if __name__ == '__main__':
username = quote_plus("yingmingapp")
password = quote_plus("123456")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/yingmingapp")
print(mongo)
# 新建一个数据库
shop = mongo["shop"]
print(shop)
# 查看数据库列表[只会列出有文档数据的数据库]
print(mongo.list_database_names()) # 上面的 my_db 因为没有内容,所以没有被创建的。
db = mongo["yingmingapp"]
# 新建集合
users = db["users"] # 新建一个集合
# 查看指定数据的集合列表[只会列出有文档数据的集合]
print( db.list_collection_names() )
# 获取指定名称对应的集合操作对象
users = db["users"]
# 删除集合
users.drop()
文档管理
添加文档
import pymongo
mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
yingmingapp = mongo["yingmingapp"]
users = yingmingapp["users"]
# 添加一个文档
document = { "name": "xiaoming", "mobile": "13012345678","age":16}
ret = users.insert_one(document)
print(ret.inserted_id) # 返回InsertOneResult对象
# 插入文档时,如果没有指定_id,将自动分配一个唯一的id。
# 添加多个文档
document_list = [
{ "name": "xiaoming", "mobile": "13033345678","age":17},
{ "name": "xiaohong", "mobile": "13044345678","age":18},
{ "name": "xiaohei", "mobile": "13612345678","age":18},
]
ret = users.insert_many(document_list)
# 打印文档_id值列表:
print(ret.inserted_ids)
删除文档
import pymongo
from urllib.parse import quote_plus
from bson import ObjectId
if __name__ == '__main__':
username = quote_plus("yingmingapp")
password = quote_plus("123456")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/yingmingapp")
yingmingapp = mongo["yingmingapp"]
users = yingmingapp["users"]
"""删除一个文档"""
query = {"_id": ObjectId("6157dcdeec192e9a0b7ea0e0")}
ret = users.delete_one(query)
print(ret)
print(ret.deleted_count)
"""删除多个文档"""
query = {"name":"xiaolan"}
ret = users.delete_many(query)
print(ret)
print(ret.deleted_count)
"""可以通过删除集合的方式,达到删除所有文档的效果"""
更新文档
import pymongo
from urllib.parse import quote_plus
from bson import ObjectId
if __name__ == '__main__':
username = quote_plus("yingmingapp")
password = quote_plus("123456")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/yingmingapp")
yingmingapp = mongo["yingmingapp"]
users = yingmingapp["users"]
"""更新一条数据"""
query = {"name": "小白"}
data = {"$set": {"age": 22}}
ret = users.update_one(query, data)
print(ret)
print(ret.modified_count)
"""更新所有文档"""
query = {"mobile": {"$regex": "^13"}}
data = {"$inc": {"age": 2}}
ret = users.update_many(query, data)
print(ret)
print(ret.modified_count)
查询文档
import pymongo
mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017/")
yingmingapp = mongo["yingmingapp"]
users = yingmingapp["users"]
# 查看一个文档
ret = users.find_one()
print(ret)
# 查看所有文档
for document in users.find():
print(document)
# 查看文档部分字段,find和find_one的第二个参数表示控制字段的显示隐藏,1为显示,0为隐藏
for document in users.find({},{ "_id": 0, "name": 1, "mobile": 1 }):
print(document)
# 条件查询
query = { "age": 18 }
document_list = users.find(query)
for document in document_list:
print(document)
# 比较运算符
query = { "age": {"$gt":17} }
document_list = users.find(query)
for document in document_list:
print(document)
# 排序显示
# 单个字段排序:
# sort("键", 1) 升序
# sort("键",-1) 降序
# 多个字段排序:
# sort([("键1",1),("键2",-1)])
document_list = users.find().sort("age")
for document in document_list:
print(document)
# 限制查询结果数量
document_list = users.find().limit(3)
for document in document_list:
print(document)
# 偏移、跳过
#skip(int)
document_list = users.find().limit(3).skip(3) # 从第3篇文档开始获取3篇文档
print(document_list)
# 自定义条件函数
document_list = users.find({"$where":"this.age==18"})
print(document_list)
若有错误与不足请指出,关注DPT一起进步吧!!!
原文地址:https://blog.csdn.net/m0_66925868/article/details/142752028
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!