python连接mongodb有多种orm,主流的有pymongo和mongoengine。

pymongo

安装相关模块

  1. pip install pymongo

pymongo操作

  • 主要对象
  1. MongoClient对象:用于与MongoDB服务器建立连接
  2. DataBase对象:对应着MongoDB中的数据库
  3. Collection对象:对应着MongoDB中的集合
  4. Cursor对象:查询方法find()返回的对象,用于进行多行数据的遍历
  • 主要方法
  1. insert_one:加入一条文档对象
  2. insert_many:加入多条文档对象
  3. find_one:查找一条文档对象
  4. find:查找多条文档对象
  5. update_one:更新一条文档对象
  6. update_many:更新多条文档对象
  7. delete_one:删除一条文档对象
  8. delete_many:删除多条文档对象
  • 交互实例
  1. # test.py
  2. from pymongo import *
  3. def get_col():
  4. """获取一个集合对象"""
  5. try:
  6. # 连接mongodb,connect=False参数加上
  7. client = MongoClient(host='192.168.1.21',port=27017, username="admin", password="123", connect=False)
  8. # client = MongoClient("mongodb://admin:123@192.168.1.21") # 另一种写法
  9. col = client.tms.eegpic # 获取集合对象
  10. except Exception as e:
  11. raise AttributeError("连接出错:{err}".format(err=e))
  12. else:
  13. return col
  14. if __name__ == "__main__":
  15. col = get_col()
  16. res = col.insert_one({'name':'cwp','age':24, 'sex':1}) # 插入一条数据
  17. col.insert_many([{'name': 'cwp', 'age': 24, 'sex': 1},{'name': 'hhh', 'age': 24, 'sex': 1}]) # 多条
  18. per = col.find_one() # 查询一条
  19. per = col.find() # 查询所有
  20. col.update_many({'sex': 1}, {'$set': {'name': 'haha'}}) # 更新一条
  21. col.delete_one({'sex': 1}) # 删除一条

flask_pymongo操作mongodb

flask_pymongo是方便pymongo集成到flask框架中,用法和pymongo几乎一样。

  • 安装orm
  1. pip install flask_pymongo
  • 初始化
  1. # extensions
  2. from flask_pymongo import PyMongo
  3. mongo = PyMongo()
  4. # __init__.py
  5. app = Flask(__name__)
  6. mongo.init_app(app=app)
  7. # setting.py
  8. MONGO_URL = 'mongodb://username:passwd@localhost:27017/db' # 设置连接参数
  9. # 得到的mongo对象相当于上例的client对象,剩下的用法与pymongo几乎一样

flask_mongoengine操作mongodb

flask_mongoengine是mongoengine在flask框架的集成,mongoengine可以按照类似关系型数据库来定义数据的结构,使得操作风格和关系型数据库相似,可以使得代码更好的维持MVC结构。

  • 安装
  1. pip install flask_mongoengine
  • 初始化配置
  1. # extensions.py
  2. from flask_mongoengine import MongoEngine
  3. db = MongoEngine()
  4. # setting.py
  5. MONGODB_SETTINGS = {
  6. 'db': 'project1',
  7. 'host': '192.168.1.35',
  8. 'port': 12345,
  9. 'username':'webapp',
  10. 'password':'pwd123'
  11. }
  12. MONGODB_CONNECT = False # 在第一次访问数据库是才打开连接
  13. # __init__.py
  14. from extensions import db
  15. app = Flask(__name__)
  16. app.init_app(app=app)
  • 定义数据库model
  1. # models.py
  2. from extensions import db
  3. class User(db.Document):
  4. """
  5. 用户model
  6. """
  7. meta = {
  8. 'collection': 'todo', # 指定集合
  9. 'ordering': ['-create_at'], # 指定查询顺序
  10. 'strict': False, # 是否使用严格模式,默认是True
  11. 'max_documents': 1000, # 文档数
  12. 'max_size': 2000000 # 字节数
  13. }
  14. email = db.Document.StringField(default='') # 设置默认值
  15. username = db.Document.StringField(max_length=50,required=True) # 最大长度,不能为空
  16. values = ListField(IntField(), default=[])
  17. class Book(db.Document):
  18. author = ReferenceField(User)
  19. 通用参数:
  20. max_length:最大长度
  21. required:是否要求一定存在这个字段
  22. default 默认值;
  23. unique:是否不能重复,true表示唯一
  24. primary_key:是否作为主键
  25. choices:枚举,如:choices=[A,B,C],choices=((A,large),(B,small))或限制值
  • 常用的字段
  1. StringField 字符串
  2. BinaryField 二进制
  3. PasswordField 密码
  4. URLField url格式字符串
  5. EmailField email格式字符串
  6. IntField 整数
  7. FloatField 浮点数
  8. BooleanField 布尔
  9. DateTimeField 日期
  10. DictField 字典
  11. FileField GridFS存储字段
  12. ImageField 图像文件存储区域
  13. ListField 数组类型
  14. EmbeddedDocumentField 嵌入文件
  15. ReferenceField 引用其他的model,相当于外键
  • 查询
  1. users = User.objects(username='xxx') # 获取查询对象
  2. # 排序
  3. users = User.objects(username='xxx').order_by("_id")
  4. # 限制返回
  5. users = User.objects(username='xxx').limit(3)
  6. # 过滤器
  7. first():返回第一个
  8. all() : 返回列表
  9. get(_id=xxx):通过id查询
  10. get_or_404:与.get()类似,但如果对象为DoesNotExist,则调用abort404)。
  11. first_or_404:与上面相同,除了.first()。
  12. paginate:对QuerySet进行分页。采用两个参数,pageper_page
  13. paginate_field:从QuerySet中的一个文档中分页。参数:field_namedoc_idpageper_page
  • 添加
  1. user = User(username='xiaoming')
  2. user.save()
  • 更新
  1. user = User.objects(username='xxx').first()
  2. user.update(email='626004181@qq.com')
  • 删除
  1. user = User.objects(username='xxx').first()
  2. user.delete()

python连接mongodb集群

  1. # pymongo
  2. from pymongo import MongoClient
  3. client = MongoClient('mongodb://admin:123456@ip1:port,ip2:port,ip3:port')
  4. # mongoengine
  5. from mongoengine import connect
  6. client = connect('user', host='mongodb://admin:123456@ip1:port,ip2:port,ip3:port')
  7. # flask_mongoengine
  8. # setting.py
  9. MONGODB_SETTINGS = [{
  10. 'db': 'project1',
  11. 'host': '192.168.1.21',
  12. 'port': 27017,
  13. },
  14. {
  15. 'db': 'project1',
  16. 'host': '192.168.1.21',
  17. 'port': 27017,
  18. },
  19. ]

参考:

MongoDB之python简单交互(三)的更多相关文章

  1. 浅谈mongodb与Python的交互

    1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...

  2. MongoDB与Python的交互

    驱动模块 pymongo是python里常用的操作MongoDB的驱动模块 可用pip下载安装 pip install pymongo 创建连接 MongoClient是MongoDB的客户端代理对象 ...

  3. python和mongodb简单交互

    python和mongodb简单交互 1.安装pymongo: pip3 install pymongo 2.pymongo的简单用法: # /usr/bin/env python3 import p ...

  4. MongoDB 安装详细教程 + 常用命令 + 与 Python 的交互

    MongoDB 简介 MongoDB (名称来自 humongous/巨大无比的, 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨 ...

  5. MongoDB的聚合操作以及与Python的交互

    上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...

  6. python装饰器三种装饰模式的简单理解

    学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time ...

  7. python和redis简单交互

    python和redis简单交互 1.安装redis模块 pip3 install redis 2.redis模块简单使用: # /usr/bin/env python3 import redis c ...

  8. MongoDB 副本集和C#交互,简单测试

    MongoDB 副本集和C#交互,简单测试 primary节点宕机: 模拟primary节点宕机的情况,这时查看监控: 可以看到37018已经成了primary节点.主界面宕机导致了整个集群发生一次e ...

  9. MongoDB与python 交互

    一.安装pymongo 注意 :当同时安装了python2和python3,为区分两者的pip,分别取名为pip2和pip3. 推荐:https://www.cnblogs.com/thunderLL ...

随机推荐

  1. UVA11736_Debugging RAM

    题目绝对够水,我就不详细说明了. 直接上代码吧.只是提示一下要用 unsigned long long. (不知道我不用字典树为什么会超时,肿么搞的) #include <iostream> ...

  2. 转---秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  3. BZOJ3747 POI2015Kinoman(线段树)

    考虑固定左端点,求出该情况下能获得的最大值.于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了.每次移动左端点在线段树上更新即可. #include< ...

  4. C++解析(11):对象的构造

    0.目录 1.对象的初始化 2.构造函数 3.无参构造函数与拷贝构造函数 4.小结 1.对象的初始化 对象中成员变量的初始值是多少? 下面的类定义中成员变量i和j的初始值是什么? 从程序设计的角度,对 ...

  5. BGP与BGP机房 国内网络运营商的主流网关解决方案

    边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议. BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议. BGP 构建在 EGP ...

  6. Halum UVA - 11478(差分约束 + 二分最小值最大化)

    题意: 给定一个有向图,每条边都有一个权值,每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的边的权值增加d,最后要让所有边权的最小值非负且尽量大 两个特判 1 ...

  7. Java发送http get/post请求,调用接口/方法

    由于项目中要用,所以找了一些资料,整理下来. GitHub地址: https://github.com/iamyong    转自:http://blog.csdn.net/capmiachael/a ...

  8. POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询)

    POJ.3468 A Simple Problem with Integers(线段树 区间更新 区间查询) 题意分析 注意一下懒惰标记,数据部分和更新时的数字都要是long long ,别的没什么大 ...

  9. laravel 5.5 在构造函数使用Session

    public function __construct() { $this->request = request(); // 验证是否登录 $this->middleware(functi ...

  10. P1967 货车运输 树链剖分

    题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最 ...