起源
下午在写一个Python连接MongoDB的工具(使用pymongo 3.2).并且使用Python 3.4.但是遇到一个问题,就是调用的时候,发现报错.
报错的程序如下:
def findAll(self, **kwargs):
print(kwargs)
limit = kwargs.get('limit', None)
skip = kwargs.get('skip', None)
query = kwargs.get('query', None)
sortQuery = kwargs.get('sortQuery', None)
if self.dbname:
collections = self.collection
db = self.getDB()
print(limit, skip)
resultData = None
def findPage(self, limit, skip): # 分页查询数据
print(limit, skip)
if isinstance(limit, int) and isinstance(skip, int):
resultData = db.collections.find().limit(limit).skip(skip)
else:
def findAllData(self, query, sortQuery): # 查询数据
print(self.dbname + "----" + self.collection)
resultData = db.collections.find(query).sort(sortQuery)
return resultData
调用:
print(dao.findAll(limit=2, skip=1))
print(dao.findAll(query={"x": "55"}))
print(dao.findAll(query={"x": "55"}, sortQuery={"x": "55"}))
报错:
Traceback (most recent call last):
File “DaoUtil.py”, line 84, in
print([item for item in dao.findAll(limit=2, skip=1)])
TypeError: ‘NoneType’ object is not iterable
写这段程序的时候,参照了网上一个例子,但是忽略了一个重要的部分{也是最重要的部分}.所以就报错了.
修改后的程序
下面的程序是最新的,可以运行的!
""" 查询数据 """
def findAll(self, **kwargs):
# print(kwargs)
if self.dbname:
collections = self.collection
db = self.getDB()
def findPage(self, dataLimit=None, dataSkip=None): # 分页查询数据
if dataLimit and isinstance(dataLimit, int): # limit 最多只显示多少.
return db.collections.find().limit(dataLimit)
if dataSkip and isinstance(dataSkip, int): # 跳过多少条
return db.collections.find().limit(10).skip(dataSkip)
if isinstance(dataLimit, int) and isinstance(dataSkip, int):
return db.collections.find().limit(dataLimit).skip(dataSkip)
def findAllData(self, dataQuery=None, dataSortQuery=None): # 查询数据
if dataQuery:
return db.collections.find(dataQuery)
else:
return db.collections.find()
if dataSortQuery:
return db.collections.find().sort(dataSortQuery)
if dataQuery and dataSortQuery:
return db.collections.find(dataQuery).sort(dataSortQuery)
if len(kwargs) == 2:
limit = kwargs.get('dataLimit', "")
skip = kwargs.get('dataSkip', "")
query = kwargs.get('dataQuery', "")
sortQuery = kwargs.get('dataSortQuery', "")
if limit or skip:
return findPage(self, **kwargs)
elif query or sortQuery:
return findAllData(self, **kwargs)
else:
return findAllData(self, "", "")
调用如下:
print([item for item in dao.findAll()])
print([item for item in dao.findAll(dataLimit=2, dataSkip=1)])
print([item for item in dao.findAll( dataSkip=1)])
print([item for item in dao.findAll(dataLimit=2)])
print([item for item in dao.findAll(dataQuery={"x": "55"})])
print([item for item in dao.findAll(dataSortQuery=[("x", "55")])])
print([item for item in dao.findAll(dataQuery={"x": "55"}, dataSortQuery=[("x", "55")])])
输出MongoDB里面的数据.
最重要,工具目前暂未完成,剩余部分暂时不发了.等写完了再发整个工具.(不会安装MongoDB?自己搜索下.)
PS:工具已经完整发布(地址).