惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Vercel News
Vercel News
博客园_首页
Y
Y Combinator Blog
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
博客园 - Franky
Engineering at Meta
Engineering at Meta
量子位
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
N
Netflix TechBlog - Medium

郑文峰的博客

使用dify对接飞书多维表格 使用n8n对接飞书多维表格 服务启动时出现 OOM 一次服务升级时pg表DDL执行超时失败 Go语言高效IO缓冲技术详解 Go语言延迟初始化(Lazy Initialization)最佳实践 Go语言字符串拼接性能对比与优化指南 Go语言结构体内存对齐完全指南 Go语言空结构体:零内存消耗的高效编程 Go语言堆栈分配与逃逸分析深度解析 Go语言原子操作完全指南 Go语言内存预分配完全指南 Go语言不可变数据共享:无锁并发编程实践 Go语言零拷贝技术完全指南 Go语言遍历性能深度解析:从原理到优化实践 Go语言Interface Boxing原理与性能优化指南 Go协程池深度解析:原理、实现与最佳实践 使用etcd分布式锁导致的协程泄露与死锁问题 基于pre-commit的Python代码规范落地实践 初识 MCP Server pulsar阻塞导致logstash无法接入日志 django-prometheus使用及源码分析 kube-proxy源码分析 kubernetes service如何通过iptables转发 tcp缓存引起的日志丢失 django-apschedule定时任务异常停止 理解calico容器网络通信方案原理 理解flannel的三种容器网络方案原理 理解Linux IPIP隧道 理解VXLAN网络
flask结合mongo
zhengwenfeng · 2022-08-10 · via 郑文峰的博客

# 简介

本文是flask中对mongo的操作. 使用Flask-MongoEngine集成了mongo的操作,使用的是类似于django中的orm操作。

# 相关链接

Flask-MongoEngine文档 (opens new window)

MongoEngine文档 (opens new window)

# 使用

mongo的配置. flask将这个配置加载进来即可.

MONGODB_SETTINGS = {
    "db": "lifeAssistant",
    "host": "192.168.0.206",
    "port": 27017
}

1
2
3
4
5

创建mongo引擎.

from flask_mongoengine import MongoEngine
mongodb = MongoEngine()

1
2

创建Document,类似于django的model.

from lifeAssistant.extension import mongodb

class Article(mongodb.Document):
    category = mongodb.StringField()
    category2 = mongodb.StringField()
    title = mongodb.StringField()
    content = mongodb.StringField()
    publisher = mongodb.StringField()
    publisher_time = mongodb.StringField()
    create_time = mongodb.StringField()

1
2
3
4
5
6
7
8
9
10

使用Document进行操作. 其他操作请看官方文档


# 通过id获取数据.  
instance = Article.objects.get_or_404(id=id)

1
2
3

# 解決问题

mongo数据转json

问题: mongo转json时,会输出ObjectId这对象,而不是直接的id值,这个时候需要转换.


# 这个是将mongo Document对象转换成json的编码器
class MongoEncoder(JSONEncoder):
    def default(self, o):

        # 转换日期
        if isinstance(o, (datetime, date)):
            pass

        # 转换Document
        if isinstance(o, BaseDocument):
            return o.to_mongo()

        # 转换id
        if isinstance(o, ObjectId):
            return str(o)

        return JSONEncoder.default(self, o)



# 在蓝图上添加mongo解码器.  jsonify会自动将Document对象转成json
bp = Blueprint("article", __name__, url_prefix="/article")
bp.json_encoder = MongoEncoder


@bp.route("/<id>/", methods=("GET",))
def article(id: str):
    instance = Article.objects.get_or_404(id=id)

    return jsonify({
        "code": 0,
        "msg": "success",
        "data": instance
    })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35