目录
2-4 Python 访问MongoDB
第一关:python连接MongoDB写入数据
1、导入pymongo库
import pymongo
2、使用MongoClient对象创建与数据库服务器的连接:
(1)与数据库访问器连接
client= pymongo.MongoClient(host='127.0.0.1',port=12717)
(2)连接到具体的mongodb服务器或副本集:
client=pymongo.MongoClient(host='10.90.9.102',port=12718)
client=pymongo.MongoClient(host=’10.90.9.101:27018,10.90.9.102: 12718,10.90.9.103:27018')
创建数据库 runoobdb :
1、mydb = client["runoobdb"] mydb(相当于别名吧)=client[“数据库名称”]
2、db=client.mydb db=client.databaseName 有则访问,无则创建!!!
创建集合:collection:
mycol=mydb["collection"]
3、访问数据库
创建MongoClient实例后,就可以访问服务器中的任何数据。
如果要访问一个数据库,可以将其当作属性一样进行访问:
db = client.myDB
也可以使用函数方式访问,如果不存在数据库,则系统会自动创建数据库:
db = client.get_database("myDB")
注意:
在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。
4、集合操作
(1)插入文档
在数据库中存储数据时,首先指定使用的集合,然后使用集合的insert_one()方法插入文档
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
x = mycol.insert_one(mydict)
(2)可以使用方法insert_many()同时插入多个文档。
mylist = [
{ "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
{ "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
{ "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
{ "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
{ "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
x = mycol.insert_many(mylist)
5、输出所有插入文档的_id值
print(x.inserted_ids)
第二关:检索文档
使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。
示例:
import pymongo
myclient= pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"] //创建数据库与集合
示例1、//查询mycol的sites集合中的所有数据并且输出:
for x in mycol.find():
print(x)
用python测试
示例2、//_id为0不输出,输出name和alexa部分的字段 :
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
print(x)
示例3、//会报错
for x in mycol.find({},{ "name": 1, "alexa": 0 }):
print(x)
示例4、查询姓名为RUNOOB的,将查询存储到myquery里面,将结果存储到mydoc里面
myquery = { "name": "RUNOOB" }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
编程测试:
第三关:更新数据
1、更新数据
my_set.update( #查询条件,#update的对象和一些更新的操作符)
update_one() 方法只能修匹配到的第一条记录
update_many() 修改所有匹配到的记录
示例:修改名字以F开头的alexa为“123“:
myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
x = mycol.update_many(myquery, newvalues)
print(x.modified_count, "文档已修改")
2、删除数据
delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
示例:删除名字以F开头的信息
myquery = { "name": {"$regex": "^F"} }
x = mycol.delete_many(myquery)
print(x.deleted_count, "个文档已删除")
编程测试: