Python:关键字参数的使用

起源

下午在写一个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

写这段程序的时候,参照了网上一个例子,但是忽略了一个重要的部分{也是最重要的部分}.所以就报错了.

python Logo
image-2360

修改后的程序

下面的程序是最新的,可以运行的!


""" 查询数据 """

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:工具已经完整发布(地址).

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据