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一起进步吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我DPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值