使用Python脚本操作MongoDB的教程

这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Python,需要的朋友可以参考下

连接数据库

MongoClient VS Connection

 class MongoClient(pymongo.common.BaseObject) | Connection to MongoDB. | | Method resolution order: |   MongoClient |   pymongo.common.BaseObject |   __builtin__.object | class Connection(pymongo.mongo_client.MongoClient) | Connection to MongoDB. | | Method resolution order: |   Connection |   pymongo.mongo_client.MongoClient |   pymongo.common.BaseObject |   __builtin__.object 


 

从这两个类的继承来看,connection是继承了MongoClient的,建议使用MongoClient而不是使用Connection。(也就是说,MongoClient可以使用方法Connection都可以使用)

 from pymongo import MongoClient client = MongoClient('192.168.40.87', 27037) db_name = 'TCL_Useraction' db = client[db_name] collection_useraction = db['useraction'] 

 

这里是通过字典的方式访问数据库和集合,同时你也可以通过.(点号)的方式访问
插入数据

save() VS insert()

mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:

一、save函数实际就是根据参数条件,调用了insert或update函数.如果想插入的数据对象存在,insert函数会报错,而save函数是改变原来的对象;如果想插入的对象不存在,那么它们执行相同的插入操作.这里可以用几个字来概括它们两的区别,即所谓"有则改之,无则加之".

二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。

更新数据

对于单个数据来说,可以更新后使用save方法

update(criteria, objNew, upsert, mult)
criteria: 需要被更新的条件表达式
objNew: 更新表达式
upsert: 如目标记录不存在,是否插入新文档。
multi: 是否更新多个文档。

 collection_useraction.update({'gid':last_gid, 'time':l_date}, {'$set':{'gid':last_gid}, '$set':{'time':l_date}, '$addToSet':{'categories':category_data}}, upsert=True) 

 
删除数据

 db.users.drop() # 删除集合 remove(self, spec_or_id=None, safe=None, multi=True, **kwargs) # remove() 用于删除单个或全部文档,删除后的文档无法恢复。 id = db.users.find_one({"name":"user2"})["_id"] db.users.remove(id) # 根据 id 删除一条记录 db.users.remove() # 删除集合里的所有记录 db.users.remove({'yy':5}) # 删除yy=5的记录 

查询

  5. 查询

 # 查询 age 小于 15 的 for u in db.users.find({"age":{"$lt":15}}): print u 

  5.1 查询一条记录

 # 查询 name 等于 user8 的 for u in db.users.find({"name":"user8"}): print u 
 # 获取查询的一个 u2 = db.users.find_one({"name":"user9"}) # 查不到时返回 None print u2 

  5.2 查询特定键 (fields)

 # select name, age from users where age = 21 for u in db.users.find({"age":21}, ["name", "age"]): print u for u in db.users.find(fields = ["name", "age"]): print u 

  5.3 排序(SORT)

 pymongo.ASCENDING # 也可以用 1 来代替 pymongo.DESCENDING # 也可以用 -1 来代替 for u in db.users.find().sort([("age", pymongo.ASCENDING)]): print u  # select * from 集合名 order by 键1 for u in db.users.find().sort([("age", pymongo.DESCENDING)]): print u # select * from 集合名 order by 键1 desc for u in db.users.find().sort([("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]): print u # select * from 集合名 order by 键1 asc, 键2 desc for u in db.users.find(sort = [("键1", pymongo.ASCENDING), ("键2", pymongo.DESCENDING)]): print u # sort 的另一种写法 for u in db.users.find({"name":"user9"}, sort=[['name',1],['sex',1]], fields = ["name", "age", 'sex']): print u # 组合写法 

  5.4 从第几行开始读取(SLICE),读取多少行(LIMIT)
    

 # select * from 集合名 skip 2 limit 3 # MySQL 的写法: select * from 集合名 limit 2, 3 for u in db.users.find().skip(2).limit(3): print u for u in db.users.find(skip = 2, limit = 3): print u # 可以用切片代替 skip & limit (mongo 中的 $slice 貌似有点问题)。 for u in db.users.find()[2:5]: print u # 单独的写 for u in db.users.find().skip(2): print u for u in db.users.find(skip=1): print u for u in db.users.find().limit(5): print u for u in db.users.find(limit = 3): print u 

  5.5 多条件查询(Conditional Operators)    # like 的可使用正则表达式查询
   

 # select * from users where name = 'user3' and age > 12 and age <15 for u in db.users.find({'age': {'$gt': 12, '$lt': 15}, 'name': 'user3'}): print # select * from users where name='user1' and age=21 db.users.find({"age":21, "name":"user1"}): < pre>

  5.6 IN
    

 for u in db.users.find({"age":{"$in":(23, 26, 32)}}): print u  # select * from users where age in (23, 26, 32) for u in db.users.find({"age":{"$nin":(23, 26, 32)}}): print u # select * from users where age not in (23, 26, 32) 

  5.7 统计总数(COUNT)
  

 print(db.users.count()) # select count(*) from users print(db.users.find({"age":{"$gt":30}}).count()) # select count(*) from users where age > 30 

  5.8 OR
  

 for u in db.use

以上就是使用Python脚本操作MongoDB的教程的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python