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

pymongo

安装相关模块

pip install pymongo

pymongo操作

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

flask_pymongo操作mongodb

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

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

flask_mongoengine操作mongodb

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

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

python连接mongodb集群

# pymongo
from pymongo import MongoClient
client = MongoClient('mongodb://admin:123456@ip1:port,ip2:port,ip3:port') # mongoengine
from mongoengine import connect
client = connect('user', host='mongodb://admin:123456@ip1:port,ip2:port,ip3:port') # flask_mongoengine
# setting.py
MONGODB_SETTINGS = [{
'db': 'project1',
'host': '192.168.1.21',
'port': 27017,
},
{
'db': 'project1',
'host': '192.168.1.21',
'port': 27017,
},
]

参考:

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. HSF源码剖析

    前言 HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用——Remot ...

  2. BZOJ4719 NOIP2016天天爱跑步(线段树合并)

    线段树合并的话这个noip最难题就是个裸题了. 注意merge最后return x,以及如果需要区间查询的话这里还需要up,无数次死于这里. #include<iostream> #inc ...

  3. BZOJ3747 POI2015Kinoman(线段树)

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

  4. 《转》理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  5. 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】

    很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...

  6. python中括号的使用

    1. 列表list是用[ ]包住的以逗号分隔的数据集合 所有对列表的解析均采用[ ],不论是元素引用或取值 [ ]表示空列表 2. 字典由键-值(key-value)对构成,一般可采用{ }表示 取字 ...

  7. QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例

    QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例 部分代码: // 创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束 QMenu *pDialog = mBar->ad ...

  8. 【JavaScript】Json

    一.前言        接着上一章的内容,继续js的学习. 二.内容        解析与序列化 JSON.stringify() —— 将js对象序列化为JSON字符串,接收三个参数:1.js对象2 ...

  9. Redis的List链表类型命令

    List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字.list类型其实就是一个每个子元素都是string类型的双向链表.我们可以通过push.po ...

  10. bzoj2734:[HNOI2012]集合选数(状压DP)

    菜菜的喵喵题~ 化序列为矩阵!化腐朽为神奇!左上角为1,往右每次*3,往下每次*2,这样子就把问题转化成了在矩阵里选不相邻的数有几种可能. 举个矩阵的例子 1 3 9 27 2 6 18 54 4 1 ...