文章目录
- 非关系型数据库
- NoSQL介绍
- MongoDB
- PyMongo:MongoDB 和 Python
- 常规操作
- 插入
- 删除
- 修改
- 查询
非关系型数据库
NoSQL介绍
. NoSQL的意思是Not Only SQL,也指非关系型数据库。通常在Web上会产生大量的数据,且产生数据的速率可能比关系型数据库要更加快,因此 NoSQL 数据库的发展能很好的处理这些大的数据。
NoSQL数据库的类型也比较多,按照存储类型通常分为列存储、文档存储、key-value存储、图存储、对象存储、xml数据库
MongoDB
. MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。它介于简单的键-值对存储与列存储之间。一般情况下其数据会另存为 JSON 对象,并且允许诸如字符串、数值、列表甚至嵌套等数据类型。
MongoDB 将数据存储于其特殊的 JSON 文档中,可以将其想象为一个 Python 字典,由于它是一个二进制编码的序列化,因此通常也会称其为 BSON 格式。
PyMongo:MongoDB 和 Python
. PyMongo是最正式的MongoDB驱动程序,以下是使用PyMongo的简单示例:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18}
x = mycol.insert_one(mydist)
print(x)
dblist = myclient.list_database_names()
collist = mydb.list_collection_names()
if "mydb" in dblist:
print("数据库存在")
if "mycol" in collist:
print("集合存在")
. 值得注意的是如果没有insert_one这一步,下面的输出都不会出现,因为MongoDB中数据库和集合的建立都是在插入记录后才会真正的建立。
常规操作
插入
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18,"sex":"man"} #没有指定_id字段,会自动给一个
#增加一条数据
mycol.insert_one(mydist)
#增加一组数据
mydists = [
{"_id":1,"name":"jerry","age":18,"sex":"man"}, #可以指定_id字段
{"_id":2,"name":"alex","age":19,"sex":"man"},
{"_id":3,"name":"jack","age":20,"sex":"man"}
]
mycol.insert_many(mydists)
删除
#条件
myquery = {"name":"tom"}
#删除一条数据
mycol.delete_one(myquery)
myquery2 = {"age":{"$gte":19}}
#删除多条数据
mycol.delete_many(myquery2)
#传入参数为空字典时,表示删除所有数据
mycol.delete_many({})
#删除集合
mycol.drop()
修改
myquery = {"name":"tom"}
newvalue = {"$set":{"age":19}}
mycol.update_one(myquery,newvalue) #修改一条数据,也就是只匹配第一个
#查询条件,名字以j开头的
myquery = {"name":{"$regex":"^j"}}
newvalue = {"$set":{"age":22}}
mycol.update_many(myquery,newvalue) #修改多条数据
查询
#查询一条数据
x = mycol.find_one()
print(x)
#按条件查询数据,这里表示查询age的值小于19的
myquery = {"age":{"$lt":19}}
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
没有参数或参数为空字典表示查询所有的
for x in mycol.find():
print(x)
#第二个参数为字段设置0或1,表示查询结果是否显示这个字段
for x in mycol.find({},{"_id":0}):
print(x)
#但是除了_id以外,其他设置的字段不能同时指定0和1
for x in mycol.find({},{"name":0,"age":1}): #报错
print(x)