1、mongodb安装与卸载
1.1、安装
python -m pip install pymongo
或
pip install pymongo
如果要安装指定版本:
python -m pip install pymongo==3.5.1
对已有的版本进行升级:
python -m pip install --upgrade pymongo
1.2、卸载
pip uninstall pymongo
或者
sudo systemctl stop mongodb
sudo apt purge mongodb
sudo apt autoremove
1.3、查看当前版本
pip show pymongo
或者在终端输入:
python
import pymongo
print(pymongo.version)
1.4、查看当前mongodb数据库状态
sudo systemctl status mongodb
1.5、关闭数据库
sudo systemctl stop mongodb
1.6、打开数据库
sudo systemctl start mongodb
1.7、重启数据库
sudo systemctl restart mongodb
1.8、设置数据库开机时是否自动启用(默认启用)
sudo systemctl disable mongodb
sudo systemctl enable mongodb
1.9、故障排查
运行mongo,应显示如下:
如果报错如下:
Failed to connect to 17.0.0.1:27017
可以运行以下指令安装mongo client与server:
sudo apt-get install mongo-client
sudo apt-get install mongo-server
或者
运行sudo systemctl start mongodb时报错:
unit mongodb.service not found
可以安装:
sudo apt-get install mongo-server
2、数据库可视化工具安装及使用
暂时推荐安装的是Navicat
2.1、安装
下载网址:
https://navicat.com.cn/products
进入网址后,点击最上面的“工具”选项,会出现如下界面:
选择Navicat Premium 16 免费试用:
然后选择下面的位置1,点击下载。
下载后的文件默认放在download文件夹下,如果没有可以在浏览器的下载管理里找到下载的内容点击打开文件夹,然后在该文件夹下打开终端,输入:
chmod +x navicat16-premium-cs.AppImage
./navicat16-premium-cs.AppImage
完成安装。
2.2、Navicat工具的使用
安装完成后,在软件管理里面找到该软件并打开,选择试用,进入软件界面:
点击左上角的“连接”,选择MongoDB进行新建连接:
连接名可以随便取,点击确定连上数据库。然后就可以对数据库的内容进行查看并操作了。
2.3、Navicat工具刷新试用期
Navicat的试用版只有14天,超过14天后无法打开Navicat,可以使用下列指令刷新试用期时间:
rm -rf ~/.config/navicat
rm -rf ~/.config/dconf/user
3、python下数据库操作常用指令
3.1、数据插入指令
3.1.1、单条数据插入指令:insert_one
insert_one会向数据库表中单独插入一条数据。
from pymongo import MongoClient
myclient = MongoClient("mongodb://localhost:27017") # Host以及port
db = myclient["myDatabase"] ##指定要操作的数据库
#mycol = db["collection1"] ##指定要操作的数据库表,不同的写法
mycol = db.collection1 # 指定要操作的数据库表,没有则自动创建
result = mycol.insert_one({"name":"lisi","age":22,'gender':'female'}) # 插入一条数据,如果没出错那么说明连接成功
print(result)
运行后终端显示:
<pymongo.results.InsertOneResult object at 0x7fb9a3301760>
3.1.2、多条数据插入指令:insert_many
insert_many可以同时插入多条数据,即使它们的参数不完全一致。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017") # Host以及port
db = myclient["myDatabase"] ##指定要操作的数据库
coll = db["collection1"] ##指定要操作的数据库表
mylist = [{ 'name': 'hanmei', 'age': 19 },{ 'name': 'wanghua', 'gender': 'male' },{ 'name': 'lihong', 'gender': 'female' }
]
y = coll.insert_many(mylist)
print(y)
3.2、数据删除指令
3.2.1、单条数据删除指令:delete_one
delete_one指令会搜索并删除第一条满足条件的数据
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.delete_one({'name':'hanmei'})
print(result)
上述示例中虽然给的检索关键词是“name"=“hanmei”,但是其只会删除表中第一条“name"="hanmei"的数据而不会对后续的数据进行操作。
3.2.2、单数据查找并删除指令:find_one_and_delete
该指令与前一条指令类似,但是区别在于该指令可以通过返回值区分删除是否成功:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_delete({'name':'lihong'})
print(result)
这里相当于删除了一条name为lihong的数据,如果找到并删除了会返回被修改的数据:
{'_id': ObjectId('64f7f81835699cd683b594b2'), 'name': 'lihong', 'gender': 'female'}
如果没有找到会返回None。
3.2.3、多条数据删除指令:delete_many
delete_many会同时删除数据库中所有满足条件的数据
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result= coll.delete_many({'gender':'male'
})
print(result.raw_result) #查看返回的结果
上述指令执行时搜索数据库表中所有gender=male的数据并进行删除,删除后的数据库表显示如下:
3.3、数据查找指令
3.3.1、数据库表查询指令:find
find函数可以返回被查询的数据库表内的所有数据,属于无条件查找
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find()
for each in result:print(each)
3.3.2、条件查询指令:find
可以在find中添加需要查询的关键字,实现带条件的查询,此时会满足所有满足条件的结果:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find({'name':'lihong'})
#输出的两种方式:
#打印单条
#print(list(result)[0])
#或打印全部
for each in result:print(each)
3.3.3、多条件查询指令:find
如果在find中同时添加多个条件,可以实现多条件的数据查询指令:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find({'name':{'$in':['lisi','lihong']},'gender':'female'})
for each in result:print(each)
如上式,查询的条件为name为’lisi’或者’lihong’,同时满足gender为female的数据。
3.3.4、仅返回第一条数据的条件查询指令:find_one
该函数返回第一条满足条件的数据:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one({'name':'lisi'})
print(result)
3.3.5、字段查询指令:distinct
该指令用于查询某个字段下存在哪些数据类型
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
Scode = coll.distinct( "age")
print (Scode)
上述代码的含义是查询当前age字段下存在哪几种不同的数据
3.4、数据修改指令
3.4.1、单字段修改指令:update_one
查询满足条件的第一条字段并修改其对应参数:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.update_one({'name':'lisi'},{'$set':{'age':'20'}})
print(result)
注意如果这里查询的条件不满足则不会进行任何操作。
3.4.2、单数据查找并修改指令:find_one_and_update
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_update({'name':'lihong'},{'$set':{'name':'hansi','age':'6'}})
print(result)
这里相当于找到第一条满足条件name为lihong的数据,修改它的name为hansi,age为6
注意这里是找到并修改,所以对于没有输入的字段是不会修改的,还是会保留原来的值。同时执行该指令后终端会显示被修改的单条数据的具体信息:
{'_id': ObjectId('64f7f78e687db263aba6bd15'), 'name': 'lihong', 'gender': 'female'}
此外,如果查找给的条件没有找到满足的数据时,result的返回值会变成None,这是find_one_and_update与update_one之间的区别。
3.4.3、单数据查找并替换指令:find_one_and_replace
前面find_one_and_update指令查找一条数据并进行修改时只会修改传入的一部分参数,对于其他参数不进行修改。如果需要将整个参数都替换掉的话可以直接使用find_one_and_replace指令:
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.find_one_and_replace({'name':'hanmei'},{'name':'jeson','weight':56})
print(result)
上述指令执行时会查找第一条满足name = hanmei的数据并使用后面的数据进行替换。该指令与update最大的区别在于update会保留那些传入参数中没有附带的字段,但是replace则会清空这些字段。
3.4.4、多数据查找并替换指令:update_many
该指令会批量修改满足查找要求的数据,将对应的字段全部修改为一致。
from pymongo import MongoClient
host = 'localhost' # 你的ip地址
client = MongoClient(host, 27017) # 建立客户端对象
db = client["myDatabase"]
coll = db["collection1"]
result = coll.update_many({'name':'lisssi'},{'$set':{'weight':'48','age':16}})
print(result)