MongoDB之python简单交互(三)
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简单交互(三)的更多相关文章
- 浅谈mongodb与Python的交互
1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...
- MongoDB与Python的交互
驱动模块 pymongo是python里常用的操作MongoDB的驱动模块 可用pip下载安装 pip install pymongo 创建连接 MongoClient是MongoDB的客户端代理对象 ...
- python和mongodb简单交互
python和mongodb简单交互 1.安装pymongo: pip3 install pymongo 2.pymongo的简单用法: # /usr/bin/env python3 import p ...
- MongoDB 安装详细教程 + 常用命令 + 与 Python 的交互
MongoDB 简介 MongoDB (名称来自 humongous/巨大无比的, 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨 ...
- MongoDB的聚合操作以及与Python的交互
上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...
- python装饰器三种装饰模式的简单理解
学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time ...
- python和redis简单交互
python和redis简单交互 1.安装redis模块 pip3 install redis 2.redis模块简单使用: # /usr/bin/env python3 import redis c ...
- MongoDB 副本集和C#交互,简单测试
MongoDB 副本集和C#交互,简单测试 primary节点宕机: 模拟primary节点宕机的情况,这时查看监控: 可以看到37018已经成了primary节点.主界面宕机导致了整个集群发生一次e ...
- MongoDB与python 交互
一.安装pymongo 注意 :当同时安装了python2和python3,为区分两者的pip,分别取名为pip2和pip3. 推荐:https://www.cnblogs.com/thunderLL ...
随机推荐
- 有道云笔记web版本居然不支持火狐
好尴尬的火狐呀....
- UVA11653_Buses
这个题目很有意思,一不小心就会让人坑在里面. 题意是这样的,给你n,k,l.分别表示总共的长度,长度为5和10的车的不同颜色数量现在问你要把n的填满有多少种方案. 很多人一开始都会脑子一根筋地想用排列 ...
- 解析php addslashes()与addclashes()函数的区别和比较
一. addslashes() 函数 addslashes(string) 函数在指定的预定义字符前添加反斜杠.这些预定义字符是:•单引号 (')•双引号 (")•反斜杠 (\)•NULL ...
- [十二]SpringBoot 之 servlet
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用spring-Boot时,嵌 ...
- [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树
4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...
- 【刷题】LOJ 6041 「雅礼集训 2017 Day7」事情的相似度
题目描述 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的有相同的事情发 ...
- 口胡:[HNOI2011]数学作业
题面 一开始看这题看了好久--觉得这题不可做. 结果是看错题了,我居然看着一段长长的C开头的单词,然后就觉得这是卡特兰数--不知道我在想些什么-- 观察到对于 i = 1~9 : f[i] = f[i ...
- 20165218 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 课程:java程序设计 姓名:赵冰雨 学号:20165218 指导教师:娄嘉鹏 实验日期:2018.4.16 实验密级:Java开发环境的熟悉 实验内容.步骤与体会: ...
- Codeforces 906B. Seating of Students(构造+DFS)
行和列>4的可以直接构造,只要交叉着放就好了,比如1 3 5 2 4和2 4 1 3 5,每一行和下一行用不同的方法就能保证没有邻居. 其他的可以用爆搜,每次暴力和后面的一个编号交换并判断可行性 ...
- 解题:HNOI 2012 永无乡
题面 并查集维护连通性,然后暴力启发式合并就完了,记得合并时边DFS边清空数组 #include<cstdio> #include<cstring> #include<a ...