python 与mongodb 交互
创建管理员

1 > use admin
2 switched to db admin
3 > db
4 admin
5 > db.createUser({user:'admin',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
6 Successfully added user: {
7 "user" : "admin",
8 "roles" : [
9 {
10 "role" : "userAdminAnyDatabase",
11 "db" : "admin"
12 }
13 ]
14 }
15 > exit
创建普通用户

1 > use mydb
2 switched to db mydb
3 > db.createUser({user:'guest',pwd:'123456',roles:[{role:'readWrite',db:'mydb'}]})
4 Successfully added user: {
5 "user" : "guest",
6 "roles" : [
7 {
8 "role" : "readWrite",
9 "db" : "mydb"
10 }
11 ]
12 }
13 > db.auth('guest','123456')
14 1
连接Mongodb

import pymongo # 建立MongoDB数据库连接
# connection = pymongo.Connection('192.168.198.128', 27017) # 如果设置了权限,注意xxx用户权限要可以cover到后面使用到的数据库
# client = pymongo.MongoClient('192.168.198.128', 27017, username='guest', password='123456')
client = pymongo.MongoClient('192.168.198.128',27017) # 连接所需数据库,test为数据库名
db=client.test
# db_name = 'test'
# db = client[db_name] # 连接所用集合,也就是我们通常所说的表,test为表名
# db和collection都是延时创建的,在添加Document时才真正创建
collection=db.test

添加数据

first_name = ["陈","张","李","王","赵"]
second_name = ["冰","鑫","程","爱","暖"]
third_name = ["强","国","明","风","芬"]
data = [
{"_id":int("1000"+str(i)),
"name":random.choice(first_name)+
random.choice(second_name)+
random.choice(third_name),
"age":random.randint(16,60),
"high":random.randint(170,190),
"list":list(random.randint(1,200) for i in range(10))
} for i in range(5)
]
try:
for record in data:
collection.save(record)
except pymongo.errors.DuplicateKeyError:
print('record exists')
except Exception as e:
print(e)

删除数据
collection.delete_many({'age':{'$gt':20,'$lt':30}}) #删除所有满足条件的文档,删除_id大于6,小于100
collection.delete_one({'age':20}) #删除一条满足条件的文档,删除_id=6
#collection_set01.delete_many({}) #删除整个集合
更新数据
collection.replace_one({'_id': 10000}, {'name': '王宝宝'}) #replace_one用指定的key-value替代原来所有的key-value
collection.update_one({"_id": {'$lt': 10008}}, {'$set': {"age": "19"}}) #update_one更新已经对应的key-value,其它不变
collection.update_many({'_id': {'$gt': 10007}}, {'$set': {'age': '50'}}) #同上,能够update所有符合匹配条件的文档
查询数据

print(‘身高小于180:')
print(type(collection.find({'high':{'$lt':180}})))
for row in collection.find({'high':{'$lt':180}}):
print(row)
print(type(collection.find_one({'high':{'$lt':180}})))
print('use find_one:',collection.find_one({'high':{'$lt':180}})['high'])
print('use find_one:',collection.find_one({'high':{'$lt':180}})) print('查询特定键')
print('查询身高大于170,并只列出_id,high和age字段(使用列表形式_id默认打印出来,可以使用{}忽视_id):')
for row in collection.find({'high':{'$gt':170}},projection=['high','age']):
print(row) print('skip参数用法')
for row in collection.find({'high':{'$gt':170}},['high','age'],skip=1):
print(row)
for row in collection.find({'high':{'$gt':170}},['high','age']).skip(1):
print(row) print('\limit参数用法')
for row in collection.find({'high':{'$gt':170}},['high','age'],limit=1):
print(row) print('用{}描述特定键')
for row in collection.find({'high':{'$gt':170}},{'high':1,'age':1,'_id':False}):
print(row) print('多条件查询')
print(collection.find_one({'high':{'$gt':10},'age':{'$lt':26,'$gt':10}})) # for u in db.users.find({"age":{"$nin":(23, 26, 32)}}):
# print (u)
# select * from users where age not in (23, 26, 32) print('count')
print(collection.find({"age":{"$gt":20}}).count()) print('\条件或')
print('大于等于29或者小于23')
for row in collection.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":29}}]}):
print(row) print('exists')
for row in collection.find({'age':{'$exists':True}}):
print('age exists',row) # select * from 集合名 where exists 键1
for row in collection.find({'age':{'$exists':False}}):
print('age not exists',row) print('正则表达式查询')
print('method 1')
for row in collection.find({'name':{'$regex':r'.*暖.*'}}):
print(row)
print('method 2')
import re
Regex = re.compile(r'.*爱.*',re.IGNORECASE)
for row in collection.find({'name':Regex}):
print(row) print('使用sort排序(文档中没有排序的字段也会打印出来,表示最小)')
print('---age 升序')
for row in collection.find().sort([["age",pymongo.ASCENDING]]):
print(row)
print('---age 降序')
for row in collection.find().sort([("age",-1)]):
print(row)
print('---age升序,high升序')
for row in collection.find().sort((("age",pymongo.ASCENDING),("high",pymongo.ASCENDING))):
print(row)
print('---age升序,high降序')
for row in collection.find(sort=[("age",pymongo.ASCENDING),("high",pymongo.ASCENDING)]):
print(row)
python 与mongodb 交互的更多相关文章
- Python与Mongodb交互
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案 MongoDB 将数据存储为一个文档,数据结构由键值 ...
- python和mongodb简单交互
python和mongodb简单交互 1.安装pymongo: pip3 install pymongo 2.pymongo的简单用法: # /usr/bin/env python3 import p ...
- python 与 mongodb的交互--更新操作
这里只要讨论python与mongod交互的时候insert的问题: from pymongo import * def insert_func(): try: client_obj= MongoCl ...
- JSON 的正确用法:Python、MongoDB、JavaScript与AjaxJSON 的正确用法:Python、MongoDB、JavaScript与Ajax
本文主要总结网站编写以来在传递 JSON 数据方面遇到的一些问题以及目前采用的解决方案.网站数据库采用 MongoDB,后端是 Python,前端采用“半分离”形式的 Riot.js,所谓半分离,是说 ...
- Python 操作 mongodb 数据库
原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...
- python 连 mongodb
这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...
- Python和Excel交互
Python和Excel交互 使用的python包为XlsxWriter 下载的链接 https://pypi.python.org/pypi/XlsxWriter 初级的例子: def write_ ...
- python操作mongodb
# python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...
- 使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...
随机推荐
- luogu P3201 [HNOI2009]梦幻布丁
传送门 先考虑暴力,显然每次是把一个位置集合和另一个集合合并,同时维护答案,合并的过程中如果两个集合每有一对元素相邻,答案就减1 优化暴力的话,说到合并,怎么能不想起启发式合并呢?每次把一个大小小的集 ...
- python 小数据池,is and "==",decode ,encode
一:小数据池 1.python运行中的缓存: 2.目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 3.python 缓存数据:缓存:int, str, bool. ...
- LOJ #6053. 简单的函数
$Min$_$25$筛模版题 为什么泥萌常数都那么小啊$ QAQ$ 传送门:Here 题意: $ f(1)=1$$ f(p^c)=p⊕c(p 为质数,⊕ 表示异或)$$ f(ab)=f(a)f(b)( ...
- Leetcode#771.Jewels and Stones(宝石与石头)
题目描述 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字 ...
- $(function() {....}) ,(function($){...})(jQuery)
$(function() {....}) 是 jQuery 中的经典用法,等同于 $(document).ready(function() {....}),即在页面加载完成后才执行某个函数,如果函数中 ...
- P1880 [NOI1995]石子合并(区间DP)
题目链接:https://www.luogu.org/problemnew/show/P1880 题目大意:中文题目 具体思路:和上一篇的思路是差不多的,也是对于每一个小的区间进行处理,然后再归并到大 ...
- 解决微信小程序使用switchTab跳转后页面不刷新的问题
wx.switchTab({ url: '../index/index', success: function(e) { var page = getCurrentPages().pop(); if ...
- linux中如何使用终端裁剪图片?
1,首先要安装支持图片裁剪的包: sudo apt-get install imagemagick 需要的话可以update一下, 2,在图片所在位置打开终端,我的我的截图叫screenshot.pn ...
- ipconfig命令查ip的时候给别人看有危险吗
知识源:Unit 4: Networking 1 4.1 Networking 1 The Routing of a Packet 网址:https://www.baidu.com/link?url ...
- Shell-匹配FTP文件名
想弄个脚本,下载每日构建的版本,由于版本文件名中有构建时间(不是固定值),只能按日期确认文件名,例如:project_name_2019-01-04*.exe 搜索了下,可以用dir filename ...