mongodb本地插入数据的基本操作
#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""在python脚本中,将文件导入到数据库中
"""
from pymongo import MongoClient
MONGO_URL = "mongodb://localhost:27017" #how to hnow
MONGO_DB = "test"
MONGO_TABLE = "day1"
client = MongoClient(MONGO_URL) # 生成mongodb对象
db = client[MONGO_DB]
## 定义插入数据的函数
def save_to_mongo(data):
if db[MONGO_TABLE].insert(data):
print("成功储存到MongoDB", data)
return True
return False
data = {'name':'mike', 'score':99}
save_to_mongo(data)
2.使用csv中的DictReader函数读取
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/10/21 11:31
# @Author : deli Guo
# @Site :
# @File : csv文件存入mongoDB.py
# @Software : PyCharm
# 导包
from pymongo import MongoClient
import csv
# 创建连接MongoDB数据库函数
def connection():
# 1:连接本地MongoDB数据库服务
conn=MongoClient("localhost")
# 2:连接本地数据库(guazidata)。没有时会自动创建
db=conn.guazidata
# 3:创建集合
set1=db.data
# 4:看情况是否选择清空(两种清空方式,第一种不行的情况下,选择第二种)
#第一种直接remove
set1.remove(None)
#第二种remove不好用的时候
# set1.delete_many({})
return set1
def insertToMongoDB(set1):
# 打开文件guazi.csv
with open('guazi.csv','r',encoding='utf-8')as csvfile:
# 调用csv中的DictReader函数直接获取数据为字典形式
reader=csv.DictReader(csvfile)
# 创建一个counts计数一下 看自己一共添加了了多少条数据
counts=0
for each in reader:
# 将数据中需要转换类型的数据转换类型。原本全是字符串(string)。
each['index']=int(each['index'])
each['价格']=float(each['价格'])
each['原价']=float(each['原价'])
each['上牌时间']=int(each['上牌时间'])
each['表显里程']=float(each['表显里程'])
each['排量']=float(each['排量'])
each['过户数量']=int(each['过户数量'])
set1.insert(each)
counts+=1
print('成功添加了'+str(counts)+'条数据 ')
# 创建主函数
def main():
set1=connection()
insertToMongoDB(set1)
# 判断是不是调用的main函数。这样以后调用的时候就可以防止不会多次调用 或者函数调用错误
if __name__=='__main__':
main()
3.超详细的利用python操作MongoDB数据库
class MyMongoDB: #创建一个类
def __init__(self, database, collection): #利用初始化的方法输入要操作的数据库(database),集合(collection)
import pymongo #导入pymongo模块
self.connet = pymongo.MongoClient() #连接到虚拟机上的mongo数据库
self.database = self.connet[database] #选择需要操作的数据库名称
self.collecttion = self.database[collection] #选择需要操作的集合名称(如果集合名不存在会自动创建)
def insert(self, data, onlyone=True): #输入需要添加的数据(data),onlyone用来控制增加数据是单条还是多条
if onlyone: #控制数据为单条
self.collecttion.insert_one(data) #向集合中增加单条数据
else: #否则为多条数据
self.collecttion.insert_many(data) #向集合中增加多条数据
def find(self, query=None, onlyone=True): #输入查询的条件(query,默认为None指查询全部数据),使用onlyone控制查询的数据是单条还是多条
if onlyone: #默认onlyone为True查询一条数据
result = self.collecttion.find_one(query) #将查询的结构用result变量来接收
return result #返回result
else: #onlyone为False查询多条数据
result = self.collecttion.find(query) #将查询的结构用result变量来接收
return list(result) #返回result,并转换成列表
def updata(self, data, new_data, onlyone=True): #指定需要修改的数据(data),修改后的数据(new_data),onlyone控制修改单条还是多条
if onlyone: #当onlyone为真
self.collecttion.update_one(data, {'$set': new_data}) #修改单条数据,使用'$set'表示指定修改数据否则会使数据库中所有数据被新数据覆盖
else: #当onlyone为假
self.collecttion.insert_many(data, {'$set': new_data}) #修改多条数据,使用'$set'表示指定修改数据否则会使数据库中所有数据被新数据覆盖
def delete(self, data, onlyone=True): #删除数据,data需要删除的数据,使用onlyone控制删除的条数
if onlyone:
self.collecttion.delete_one(data) #删除一条
else:
self.collecttion.delete_many(data) #删除多条
wl = MyMongoDB('stu', 'wl') #指定我们需要操作的数据库为stu数据库,需要操作的集合为wl集合
wl.insert([{'name': 'cx', 'profession': 'bigdata', 'age': 18},{'name': 'fhb', 'profession': 'bigdata', 'age': 21}], onlyone=False)
#向wl集合中插入两条数据,控制onlyone为False,告知insert函数我们需要插入多条数据
print(wl.find({'name': 'cx'})) #在inset中为我们已经增加了数据,此时查询名字为cx学生信息并打印
wl.updata({'profession': 'bigdata'}, {'profession': 'English'}) #将学生专业为大数据的改成英语专业
print(wl.find(onlyone=False)) #控制onlyone=False,打全部数据