python mongodb orm_MongoDB之python简单交互(三)

本文介绍了Python连接MongoDB的三种方式:Pymongo、Flask-Pymongo和Flask-Mongoengine。详细讲解了各自的主要对象、方法以及如何进行数据的插入、查询、更新和删除操作,并提供了初始化配置和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,

},

]

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值