python和mongodb实现连接需要依靠一个pymongo的模块,通过对该模块的学习,开发了一个简单的运维工具-实时监测mongodb数据库数量的变化
工具代码地址:https://github.com/wayne-yhp/mongodb-pymongo-monitordb
pymongo使用讲解
- 导入pymongo模块
- 使用pymongo.client类建立连接
- 建立连接后指定集合
import pymongo
#数据库没有开启认证,不需要输入账号密码时
url = "mongodb://127.0.0.1:27017"
client = pymongo.MongoClient(url)
db = client['test'] #test数据库名
col = db['col'] #col集合名
#数据库开启认证,需要输入帐号密码时
url = "mongodb://127.0.0.1:27017"
client = pymongo.MongoClient(url)
db = client['test'] #test数据库名
db.auth('test1','test1') #权限验证,帐号和密码都是test1,验证失败会报错
col = db['col'] #col集合名
#利用数据库集合对象进行具体操作
col.count() #查询数量
col.find() #查询所有数据
更多操作详细请看:
http://api.mongodb.com/python/current/api/index.html
很多人可能会问为什么为什么上述代码是先切换到数据库在进行用户认证,这涉及mongodb的权限管理机制,你需要知道mongodb的用户只能在拥有权限的数据库中进行登陆,以数据库为基础单位,来对用户进行权限验证
在终端执行py脚本时接收参数,进行解析
依赖模块:
- getopt
- sys
在终端调用py脚本时,携带的所有参数都会以空格为分界符被携带在sys模块的argv属性中,这是一个列表,列表第一个元素是文件名,而getopt模块可以帮我们解析sys的argv参数,返回两个列表,分别是带选项的参数列表和不带选项的参数列表,方便我们进行判断分析
#将sys.argv除去第一个元素的值传入
opts, args =getopt.gnu_getopt(sys.argv[1:], "u:p:i:d:c:P:h", ["username=", "password=", "ip_address","database_name=", "collection=", "port=" ,"help"])
addr = None
db_name = None
collection_name = None
username = None
password = None
port = None
# 单独存储带选项的参数
for opt, arg in opts:
if opt in('-u', '--username'):
username = arg
elif opt in('-p', '--password'):
password = arg
elif opt in('-i', '--ip_address'):
addr = arg
elif opt in('-d', '--database_name'):
db_name = arg
elif opt in('-c', '--collection'):
collection_name = arg
elif opt in ('-P', '--port'):
port = arg
getopt.gnu_getopt()传入参数讲解
- 第一个参数是需要进行分析的命令行字符串列表,即sys.argv[1:]
- 第二个参数是一个字符串,代表短格式选项,规定命令行中可以出现哪些短选项,例如-i, -d, -u等等,字母后面加上:表示出现这个选项时,一定要在后面加上传入的参数,例如-u test1,反之不需要传入参数,例如-u
- 第三个参数是一个字符串列表,与第二个参数作用类似,规定可以出现哪些长选项,=号的作用等同于:,例如带参时–username test1,不带参时–username
PS:
监测工具使用方法(本人电脑操作系统为OS X)
打开mongodb server
进入到脚本所在文件夹,执行入口脚本
执行结果(每30s自动监测一次,断线会自动重连)
- 查询结果写入count.txt文件中
- 查询结果写入count.txt文件中