Python+MongoDB自增键值的简单实现


Posted in Python onNovember 04, 2016

背景

最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段。

传统的关系型数据库要实现起来是非常容易,只要直接设置一个自增字段就行了,插入数据时不用管这个键值,只管自己处理的数据就行了,会自动实现自增的功能,但是非关系型数据库好像没有这个功能(或者我不知道)。百度之后发现都是MongoDB的设置方法,并不是我想要的。

解决思路

百度没有找到好的思路,那就只能自己解决了,我的想法很简单,字段不会自增,那么就自己造一个自增的方案。

我发现在MongoDB修改的方法有一个$inc的方法.可以实现int类型的自增。那么就非常简单了,自己建一个collection,然后这个collection中只有一个int的字段,每次插入数据时来这个collection取ID就行了,然后再调用一下$inc方法,那么就实现了自动自增的方案。

代码展示

Python实现起来还是非常简单的Python和Django非常契合。代码如下:

 

def bugPlus(self):
  """
  bugID自增
  :return:True
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  db.update_one({"bugID": self.getBugID()}, {"$inc": {"bugID": 1}})
  return True

 每次插入成功后,调用这个方法就可以实现ID的自增。

def getBugID(self):
  """
  获取当前bug的最新编号
  :return:None
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  rst = db.find_one()
  return rst['bugID']

在插入之前,调用这个方法,这样每次插入数据时插入的ID就是实现自增的ID。

缺点

当然,这种方式还是有缺点的,调用的时候多使用了方法,因此需要确认方法是否执行成功,否则会导致下次插入的ID不是自增后的数据。每次多调了一次方法,会导致性能下降。

其他

如果有更好的实现方式,请告诉我!

以上这篇Python+MongoDB自增键值的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
python登陆asp网站页面的实现代码
Jan 14 Python
python文件与目录操作实例详解
Feb 22 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
python读写csv文件方法详细总结
Jul 05 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
基于Python的接口测试框架实例
Nov 04 #Python
浅谈Python爬取网页的编码处理
Nov 04 #Python
Django接受前端数据的几种方法总结
Nov 04 #Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 #Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 #Python
浅谈python字典多键值及重复键值的使用
Nov 04 #Python
用Python将动态GIF图片倒放播放的方法
Nov 02 #Python
You might like
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
实例Python处理XML文件的方法
2015/08/31 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python config文件的读写操作示例
2019/09/27 Python
python计算二维矩形IOU实例
2020/01/18 Python
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
三个Unix的命令面试题
2015/04/12 面试题
学校消防安全制度
2014/01/30 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
文艺晚会开场白
2015/05/29 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis