用python操作nosql

# 引入库文件


```python
import pymongo
```

# 链接数据库


```python
#连接数据库,指定IP和端口
myclient=pymongo.MongoClient('localhost',27017)
```

# 查看数据库和集合


```python
#查看数据库
dbs=myclient.list_database_names()
dbs
```


    ['Employee', 'admin', 'config', 'local', 'test']


```python
#切换/创建(本身不存在)数据库
mydb=myclient['test'] #切换到数据库test
#查看test数据库中的所有集合
cols=mydb.list_collection_names()
cols
```


    ['c1']


```python
#直接切换/创建集合
c1=mydb['c1']
```


```python
#显示创建、删除集合
mydb.create_collection('c2')
mydb.drop_collection('c2')
```


    {'nIndexesWas': 1, 'ns': 'test.c2', 'ok': 1.0}

# 文档的增删查改


```python
myclient=pymongo.MongoClient('localhost',27017)
mydb=myclient['test']#切换到数据库
c1=mydb['c1']

#打印文档
for i in c1.find():
    print(i)
```

    {'_id': ObjectId('664c3b0325e41a48c93b803c'), 'name': 'aa1', 'age': 88.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803d'), 'name': 'aa2', 'age': 99.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803e'), 'name': 'aa3', 'age': 100.0}
    

# 增
单文档插入 insert_one


```python
d1={"name":"kk","age":18,"major":"大数据技术"} #在python中,key(字段)必须用双引号括起来
x=c1.insert_one(d1)
print(x.inserted_id)
```

    664c4817bcae8cc760f1e979
    


```python
#查询c1文档
for i in c1.find():
    print(i)
```

    {'_id': ObjectId('664c3b0325e41a48c93b803c'), 'name': 'aa1', 'age': 88.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803d'), 'name': 'aa2', 'age': 99.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803e'), 'name': 'aa3', 'age': 100.0}
    {'_id': ObjectId('664c4817bcae8cc760f1e979'), 'name': 'kk', 'age': 18, 'major': '大数据技术'}
    

多文档的插入 insert_many


```python
d2=[
    {"name":"xx","age":19,"major":"大数据技术"},
    {"name":"ll","age":20,"major":"人工智能"},
    {"name":"uu","age":19,"major":"人工智能"}
]
x=c1.insert_many(d2)
print(x.inserted_ids)#打印多文档_id
```

    [ObjectId('664c49aebcae8cc760f1e97a'), ObjectId('664c49aebcae8cc760f1e97b'), ObjectId('664c49aebcae8cc760f1e97c')]
    


```python
#查询从c1文档
for i in c1.find():
    print(i)

```

    {'_id': ObjectId('664c3b0325e41a48c93b803c'), 'name': 'aa1', 'age': 88.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803d'), 'name': 'aa2', 'age': 99.0}
    {'_id': ObjectId('664c3b0325e41a48c93b803e'), 'name': 'aa3', 'age': 100.0}
    {'_id': ObjectId('664c4817bcae8cc760f1e979'), 'name': 'kk', 'age': 18, 'major': '大数据技术'}
    {'_id': ObjectId('664c49aebcae8cc760f1e97a'), 'name': 'xx', 'age': 19, 'major': '大数据技术'}
    {'_id': ObjectId('664c49aebcae8cc760f1e97b'), 'name': 'll', 'age': 20, 'major': '人工智能'}
    {'_id': ObjectId('664c49aebcae8cc760f1e97c'), 'name': 'uu', 'age': 19, 'major': '人工智能'}
    

# 查


```python
#按条件查询c1文档
#find()第一个参数为查询条件,第二个参数为(不)显示的列
for i in c1.find({"major":"大数据技术"},{"_id":0}):
    print(i)
```

    {'name': 'kk', 'age': 18, 'major': '大数据技术'}
    {'name': 'xx', 'age': 19, 'major': '大数据技术'}
    


```python
#按修饰符进行查询
q={"age":{"$gt":17}}#查询条件
for i in c1.find(q,{"_id":0}):
    print(i)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa2', 'age': 99.0}
    {'name': 'aa3', 'age': 100.0}
    {'name': 'kk', 'age': 18, 'major': '大数据技术'}
    {'name': 'xx', 'age': 19, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    


```python
#正则匹配 $regex, 查询name以a开头的所有文档
q1={"name":{"$regex":"a"}}
for i in c1.find(q1,{"_id":0}):
    print(i)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa2', 'age': 99.0}
    {'name': 'aa3', 'age': 100.0}
    

# 管道查询


```python
for i in c1.find({},{"_id":0}):
    print(i)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa2', 'age': 99.0}
    {'name': 'aa3', 'age': 100.0}
    {'name': 'kk', 'age': 18, 'major': '大数据技术'}
    {'name': 'xx', 'age': 19, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    


```python
#在python中管道必须为list形式,所以要用{括起来]
pin=[
    {"$group":{"_id":"$major","max_age":{"$max":"$age"}}}
]
#返回结果为列表,循环打印
result=c1.aggregate(pin)
for i in result:
    print(i)
```

    {'_id': '大数据技术', 'max_age': 19}
    {'_id': None, 'max_age': 100.0}
    {'_id': '人工智能', 'max_age': 20}
    

按照major分组,统计年龄平均值,并统计每个分组文档数,按照平均年龄降序排序


```python
pin1=[
    {"$group":{"_id":"$major","ave_age":{"$avg":"$age"},"count":{"$sum":1}}},
    {"$sort":{"avg_age":-1}}
]
#返回结果为列表,循环打印
result=c1.aggregate(pin1)
for i in result:
    print(i)
```

    {'_id': None, 'ave_age': 95.66666666666667, 'count': 3}
    {'_id': '大数据技术', 'ave_age': 18.5, 'count': 2}
    {'_id': '人工智能', 'ave_age': 19.5, 'count': 2}
    

# 改 (更新)


```python
c1=mydb['c1']
for d in c1.find({},{"_id":0}):
    print(d)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa2', 'age': 99.0}
    {'name': 'aa3', 'age': 100.0}
    {'name': 'kk', 'age': 18, 'major': '大数据技术'}
    {'name': 'xx', 'age': 19, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    


```python
#name为aa3的文档,年龄改为77, $set--修改列值
c1.update_one({"name":"aa3"},{"$set":{"age":77}}) #第一个参数为查询条件,第二个参数为修改表达式
#查询验证
for d in c1.find({"name":"aa3"},{"_id":0}):
    print(d)
```

    {'name': 'aa3', 'age': 77}
    

更新多个文档update_many:更新找到的所有文档


```python
#更新major为大数据技术的文档中的年龄字段,全部加5岁—-$inc
q={"major":"大数据技术"}#条件
n_d={"$inc":{"age":5}} #新数据
c1.update_many(q,n_d)
for i in c1.find({},{"_id":0}):
    print(i)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa2', 'age': 99.0}
    {'name': 'aa3', 'age': 77}
    {'name': 'kk', 'age': 23, 'major': '大数据技术'}
    {'name': 'xx', 'age': 24, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    

# 删

删除单个文档——delete_one:删除匹配上的第一个文档


```python
#删除name为aa2的文档
c1.delete_one({"name":"aa2"})#参数为匹配条件
for i in c1.find({},{"_id":0}):
    print(i)
```

    {'name': 'aa1', 'age': 88.0}
    {'name': 'aa3', 'age': 77}
    {'name': 'kk', 'age': 23, 'major': '大数据技术'}
    {'name': 'xx', 'age': 24, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    

删除多个文档——delete_many:删除所有匹配上的文档


```python
#删除name以a开头的文档,需要使用正则表达式匹配
c1.delete_many({"name":{"$regex":"a"}})
for i in c1.find({},{"_id":0}):
    print(i)
```

    {'name': 'kk', 'age': 23, 'major': '大数据技术'}
    {'name': 'xx', 'age': 24, 'major': '大数据技术'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    

删除所有文档——delete_many——查询条件为空即可

# 其他


```python
# 排序——sort():按照年龄进行升序排序
for i in c1.find({},{"_id":0}).sort("age",1):
    print(i)
```

    {'name': 'uu', 'age': 19, 'major': '人工智能'}
    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'kk', 'age': 23, 'major': '大数据技术'}
    {'name': 'xx', 'age': 24, 'major': '大数据技术'}
    


```python
#限制返回数——limit():只返回指定个数的文档
for i in c1.find({},{"_id":0}).limit(1):
    print(i)
```

    {'name': 'kk', 'age': 23, 'major': '大数据技术'}
    


```python
#跳过——skip():跳过指定的文档数,返回剩下的文档
for i in c1.find({},{"_id":0}).skip(2):
    print(i)
```

    {'name': 'll', 'age': 20, 'major': '人工智能'}
    {'name': 'uu', 'age': 19, 'major': '人工智能'}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值