python中MongoDB的常用操作
前提:安装pymongo
python版本:python3
一、环境启动和配置
1、在cmd中输入:
> pip install pymongo
2、直接在pycharm安装:
pychram-file-settings-project-Interpreter,选择项目,点击绿色的加号,搜索pycharm,然后点击install Package。完成后会提示
1、用pycharm连接到MongoDB:
#导入模块
from pymongo import MongoClient
1、连接MongoDB数据库
conn = MongoClient("localhost")
2、关联某个数据库 连接名.数据库名
#(1)、关联的数据库存在,则直接关联该数据库
#(2)、关联的数据库不存在,则创建库
db = conn["school"]
3、关联数据表(集合)
#(1)、关联的数据表存在,则直接关联该数据表
#(2)、关联的数据表不存在,则创建表
grade_1_3 = db["grade_1_3"]
4、开始表的相关操作
result = grade_1_3.find({},{"_id":0})
for i in result:
print(i)
为方便连接MongoDB,给它建一个类,下次用直接调就行:
from pymongo import MongoClient
class Conn:
def __init__(self,host,db,tables):
# 获取链接地址
self.con = MongoClient(host)
# 关联数据库
self.db = self.con[db] #con[db] 等价于 con.myschool
# 关联数据表
self.tables = self.db[tables]
def getData(self):
return self.tables
if __name__ == "__main__":
# host = "localhost"
# db = "myschool"
# tables = "score"
# 创建一个conn实例
test = Conn("localhost","myschool","score").getData()
# 查询数据
result = test.find({}, {"_id": 0})
for i in result:
print(i)
二、MongoDB的常用操作
1、导入上面建的连接类
from day20.conn import Conn
#传入连接地址、数据库和表名
grade_1_3 = Conn("localhost","school","grade_1_3").getData()
#查询表的筛选内容,result就是查到的结果
result = test.find({}, {"_id": 0}) #{"_id": 0}代表,_id这项内容不输出
#把内容循环输出
for i in result :
print(i)
2、查询数据
#查询名称为张三或者李四,并且年龄大于8岁的数据
result = grade_1_3.find({"name":{"$in":["张三","李四"]},
"age":{"$gt":8}},{"_id":0})
#查询名称为张三或者是李四,或者年龄大于30岁的数据
result = grade_1_3.find(
{
"$or":
[
{"name":{"$in":["张三","李四"]}},
{"age":{"$gt":30}}
]
},{"_id":0})
3、更新数据
#更新一条数据
result = grade_1_3.update_one({"name":"王五"},{"$set":{"age":22}})
#查询所有数据有没有age,如果有统一加2,没有就创建age,并赋值给2
result = grade_1_3.update_many({},{"$inc":{"age":2}})
# $currentDate 代表时间戳模式
result = grade_1_3.update_many(
{"name":
{"$in":["张三","李四"]}},
{"$currentDate":
{"create_time":True, # 相当于是:{‘$type‘:’date’},产生日期时间字段
"mod_time":{"$type":"timestamp"} # 产生时间戳格式的字段
}})
4、查询时间戳并格式化输出
#查询出时间戳并转化为正常日期格式
import time
result = grade_1_3.find({"name":"张三"},{"_id":0})
doc = []
for i in result :
doc.append(i)
mod_time = doc[0]["mod_time"]
# print(dir(mod_time))
print("as_datetime-->",mod_time.time)
timestamp = mod_time.time
#将时间戳转化为时间日期格式
timeArray = time.localtime(timestamp)
#将timeArray进行格式化
date = time.strftime("%Y-%m-%d %H:%M:%S",timeArray)
print(date)
5、删除数据
删除一条数据
grade_1_3.delete_one({"age":19})
删除多条数据
grade_1_3.delete_many({"age":19})
# 查询所有记录,将查询到的结果增加一字段:locked:1,同时将age## 字段里的值增加2,返回的结果中只包含age,name,同时对返回结果按# age降序排列,最后返回该记录修改之前的状态
result = grade_1_3.find_one_and_update({},
{
"$set":{"locked":1},
"$inc":{"age":2}
},
projection={"age":True,"name":True},
sort=[("age",pymongo.DESCENDING)],
return_document=pymongo.ReturnDocument.BEFORE
)
print(result)
6、读取文本数据,然后写到数据库中
from conn import Conn
import json
#表一,grade_json1
grade_json1 = Conn("localhost","school","grade_json").getData()
#表二grade_json
grade_json = Conn("localhost","school","grade_json1").getData()
#读取数据
file1 = open("data/zips.json")
# 方法一
result = []
#循环读取数据
for i in file1:
x = json.loads(i)
result.append(x)
#增加数据到数据库
grade_json.insert_many(result)
#方法二
for i in file1:
x = json.loads(i)
grade_json1.insert_one(x)