Python基础之操作MongoDB数据库

一:docker-mongodb

# mongodb官方docker见
https://hub.docker.com/_/mongo

用到的文件如下:

root@eth:~/docker/mongodb# tree
.
├── docker-compose.yml
├── Dockerfile
└── setup
    └── setup.js

docker-compose.yml文件内容如下:

root@eth:~/docker/mongodb# cat docker-compose.yml
version: '3.1'
services:
  mongo:
    build: ./
    container_name: mongodb
    restart: always
    ports:
      - 27017:27017
    volumes:
      #- ./setup:/docker-entrypoint-initdb.d/
      - /data/mongodb_docker/data:/data/db/
    environment:  # admin账号和密码
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
  # 如果不需要MongoDB的网页端,以下内容可以不加
  mongo-express:
    image: mongo-express
    container_name: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:  # 这里只能使用与上方MONGO_INITDB_ROOT_USERNAME相同的root账号
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: admin

Dockerfile文件内容如下:

root@eth:~/docker/mongodb# cat Dockerfile
FROM mongo
# 将本地的setup.js拷贝到Docker容器中
COPY ./setup/setup.js /docker-entrypoint-initdb.d/

setup.js文件如下:

root@eth:~/docker/mongodb# cat setup/setup.js
db = db.getSiblingDB('newDB');  // 创建一个名为"newDB"的DB
db.createUser(  // 创建一个名为"shon"的用户,设置密码和权限
    {
        user: "shon",
        pwd: "shonlovescoding",
        roles: [
            { role: "dbOwner", db: "newDB"}
        ]
    }
);
db.createCollection("newCollection");  //"newDB"中创建一个名为"newCollection"的Collection

启动mongodb容器:

root@eth:~/docker/mongodb# docker-compose up -d
root@eth:~/docker/mongodb# docker-compose ps
    Name                   Command               State            Ports
---------------------------------------------------------------------------------
mongo-express   tini -- /docker-entrypoint ...   Up      0.0.0.0:8081->8081/tcp
mongodb         docker-entrypoint.sh mongod      Up      0.0.0.0:27017->27017/tcp

二:MongoDB介绍

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
tablejoins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

MongoDB三元素:
1:文档(document)–> 就是关系型数据库中的一行。文档是一个对象。由键值对构成,是json的扩展形式

{'name': 'abc', 'gender': '1'}

2:集合(collection)–> 就是关系型数据库中的表。可以存储多个文档,结构可以不固定。如可以存储如下文档在一个集合中

三:Mongodb数据类型

Object  ID :Documents 自生成的 _id
String: 字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (Python中的List)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

四:MongoDB基本操作命令

https://www.runoob.com/mongodb/mongodb-connections.html

五:python操作mongodb

5.1 安装pymongo

pip install pymongo

pymongo api文档:

http://api.mongodb.com/python/current/api/pymongo/collection.html

5.2 插入数据

client = pymongo.MongoClient('mongodb://admin:admin@172.17.2.36:27017/')
# 获取数据库,如果库不存在会自动创建
db = client.motest
# 获取数据库中的集合(也就是mysql中的表),如果集合不存在会自动创建
collection = db.qa
# 插入单条数据
# collection.insert_one({'username': 'Bruce Lee'})
# 插入多条数据
collection.insert_many([
    {'username': 'Jet Lee', 'age': 20},
    {'username': 'Stephen Chow', 'age': 30}
])

5.3 查询数据

查询多条数据:

import pymongo
client = pymongo.MongoClient('mongodb://admin:admin@172.17.2.36:27017/')
# 获取数据库,如果库不存在会自动创建
db = client.motest
# 获取数据库中的集合(也就是mysql中的表),如果集合不存在会自动创建
collection = db.qa
cursor = collection.find()
for x in cursor:
    print(x)
# {'_id': ObjectId('5eb51d306100d798a4973df2'), 'username': 'Bruce Lee'}
# {'_id': ObjectId('5eb520fa134f92d54ab2283c'), 'username': 'Bruce Lee'}
# {'_id': ObjectId('5eb5221a943457c3517c5aa5'), 'username': 'Jet Lee', 'age': 20}
# {'_id': ObjectId('5eb5221a943457c3517c5aa6'), 'username': 'Stephen Chow', 'age': 30}

查询集合中第一条数据:

result = collection.find_one()
print(result)

后面也可以带查询条件:

result = collection.find_one({'username': 'Bruce Lee'})
print(result)

5.4 更新数据

更新单条数据:

# 将{'username': 'Bruce Lee'}的数据更新为{"username": 'aaa'}
result = collection.update_one({'username': 'Bruce Lee'}, {"$set": {"username": 'aaa'}})
print(result)

更新多条数据:

result = collection.update_many({'username': 'aaa'}, {"$set": {"username": 'bbbb'}})
print(result)

5.5 删除数据

result = collection.delete_one({'username': 'bbb'})
result = collection.delete_many({'username': 'bbb'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值