当前位置: 首页 > news >正文

【fastapi+mongodb】使用motor操作mongodb

上一篇文章,我们在电脑上安装了mongodb数据库。这篇文章,我们在fastapi后端使用motor操作mongodb

如果你还没看过上一篇文章,链接在这里:【MongoDB】安装与使用

安装 motor

motor 是一个用于操作 mongodb 数据库的 python 库,它封装了 pymongo 库,让其使用起来更加方便。执行下面的命令安装 motor:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple motor

我们先使用命令行访问 mongodb 数据库,在其中新建数据库和集合(也就是 MySQL 的表):

use sunrain //新建 sunrain 数据库
db.createCollection("users") //新建 user 集合

规划项目结构

虽然我们可以把所有的内容都写在 main.py 文件里,但这显然会导致后续维护变得困难。因此我们打算新建一个 python 文件,和 main 文件在一个文件夹下,取名为 dao.py

import motor.motor_asyncio
import asyncio# 连接mongodb
client = motor.motor_asyncio.AsyncIOMotorClient('localhost', 27017)
# 访问 sunrain 数据库
db_sunrain = client['sunrain']
# 访问 users 集合(表)
collection_users = db_sunrain['users']

所谓增删改查,先从最简单的增开始:

async def insert_user():document_user = {'name': 'bluebonnet27', 'age': 24}result_insert_user = await collection_users.insert_one(document_user)print('insert_user result: ')print(result_insert_user.inserted_id)

注意此处方法需要使用异步,insert_one只能插入一条数据。

写完代码后,可以利用 asyncio 库测试我们的方法:

if __name__ == "__main__":print("TEST: DAO")loop = asyncio.get_event_loop()loop.run_until_complete(insert_user())

顺利的话,控制台执行这个文件,有如下输出:

D:\Codes\CPP\VSCodeProjects\2024\March\vueProject\SunrainServer\dao.py:17: DeprecationWarning: There is no current event looploop = asyncio.get_event_loop()
insert_user result:
6653325dfba58f88883ecd31

VS Code 插件

可以在 VS Code 里安装这个插件,避免非得用命令行查看数据库,也比官方性能低下的 mongo compass 好用:
MongoDB for VS Code
第一次运行需要输入连接字符串,直接复制命令行连接显示的那一串就行:
连接字符串
就可以看到我们存入的数据:
数据

相关文章:

  • 给页面元素添加水印
  • Tomcat调优参数
  • Linux系统如何通过编译方式安装python3.11.3
  • Java——接口
  • Vue 2与Vue 3的区别
  • java图书电子商务网站的设计与实现源码(springboot+vue+mysql)
  • vue3父组件使用ref获取子组件的属性和方法
  • java 拦截器-用户无操作超时退出利用Redis
  • 【智能算法应用】模拟退火算法求解多车型车辆路径问题HFVRP
  • 在CSDN上成长的感悟,你的粉丝长啥样?
  • DEM、DSM和DTM之间的区别及5米高程数据获取
  • DragonKnight CTF2024部分wp
  • 缓存归纳总结1
  • go语言泛型Generic最佳实践 --- slices包
  • Unity 代码实现Animator开始和结束播放动画回调
  • CAP理论的例子讲解
  • Git同步原始仓库到Fork仓库中
  • Java IO学习笔记一
  • Java小白进阶笔记(3)-初级面向对象
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mysql 5.6 原生Online DDL解析
  • Odoo domain写法及运用
  • vuex 学习笔记 01
  • 对JS继承的一点思考
  • 二维平面内的碰撞检测【一】
  • 关于for循环的简单归纳
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 使用agvtool更改app version/build
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • #if 1...#endif
  • $.ajax()方法详解
  • (pycharm)安装python库函数Matplotlib步骤
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)模仿学习-完成后台管理页面查询
  • (四)软件性能测试
  • (一)SpringBoot3---尚硅谷总结
  • (一)VirtualBox安装增强功能
  • (译) 函数式 JS #1:简介
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (轉貼) UML中文FAQ (OO) (UML)
  • *上位机的定义
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .Net - 类的介绍
  • .net core 依赖注入的基本用发
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net Winform开发笔记(一)