2016-12-29 104 views
0

内有一些有趣的一些与Python,新和敏锐的感觉,但被击败。 任何帮助将不胜感激。难道我试图从烧瓶应用程序中查询蒙戈,我似乎失去了一些东西或与执行非法操作:python3/pymongo“类型错误:‘NoneType’对象不是标化”

local_settings = Database.find_sort(AdminConstants.COLLECTION, "admin.created_date", -1, 1) 

这坐在类之下,自然会返回无。这不应该是因为运行命令(没有类)在命令行上返回一个值。我会在最后加上这个,希望有人能为我解决这个问题。将此类移到课程外部仍然会导致错误 - 看到它在终端上运行并且在我需要的地方失效时非常令人沮丧。

编辑:数据库当然在这一点上程序的初始化。 EDIT2:不要太肯定自己的;)

代码: database.py

import pymongo 
class Database(object): 
    URI = "mongodb://127.0.0.1:27017" 
    DATABASE = None 

    @staticmethod 
    def initialize(): 
     client = pymongo.MongoClient(Database.URI) 
     Database.DATABASE = client['cvm'] 

    @staticmethod 
    def find_sort(collection, query, direction, limit): 
     return Database.DATABASE[collection].find({}).sort(query, direction).limit(limit) 

admin.py

from src.common.database import Database 

class Admin(object): 
    local_settings = Database.find_sort(AdminConstants.COLLECTION, "admin.created_date", -1, 1) 

错误输出:

Traceback (most recent call last): 
    File "/home/frank/PycharmProjects/cvm/src/run.py", line 1, in <module> 
    from src.app import app 
    File "/home/frank/PycharmProjects/cvm/src/app.py", line 19, in <module> 
    from src.models.admin.views import admin_blueprint 
    File "/home/frank/PycharmProjects/cvm/src/models/admin/views.py", line 4, in <module> 
    from src.models.admin.admin import Admin 
    File "/home/frank/PycharmProjects/cvm/src/models/admin/admin.py", line 6, in <module> 
    class Admin(object): 
    File "/home/frank/PycharmProjects/cvm/src/models/admin/admin.py", line 8, in Admin 
    local_settings = Database.find_sort(AdminConstants.COLLECTION, "admin.created_date", -1, 1) 
    File "/home/frank/PycharmProjects/cvm/src/common/database.py", line 27, in find_sort 
    return (Database.DATABASE[collection].find({}).sort(query, direction).limit(limit)) 
TypeError: 'NoneType' object is not subscriptable 

终端:

Python 3.4.3 (default, Aug 9 2016, 15:36:17) 
>>> import pymongo 
>>> URI = "mongodb://127.0.0.1:27017" 
>>> client = pymongo.MongoClient(URI) 
>>> DATABASE = client['cvm'] 
>>> def find_sort(collection, query, direction, limit): 
...  return DATABASE[collection].find().sort(query, direction).limit(limit) 
... 
>>> COLLECTION = "admin" 
>>> tmp1 = find_sort(COLLECTION, "created_date", -1, 1) 
>>> list(tmp1) 
[{'created_date': '20161212', '_id': ObjectId('5863f28d101bbd88b70be948')}] 

感谢您的时间。

+0

那么你说数据库被初始化了,但是那个错误清楚地告诉你它不是 - 我不知道它是怎么回事。你认为你在做什么? –

+0

我以为我正在初始化我的app.py,这不是这种情况,需要在管理类中调用初始化。我不认为这是必需的,但显然是新手的疏忽。请发表回复,我会将其标记为已接受。谢谢 –

回答

0

如发现由丹尼尔·罗斯曼的DATABSE未初始化。我相信这是通过一个更早的通话来完成的,但在课堂上是必需的。

Well you say the database is initialised, but that error clearly tells you it isn't - and I don't know how it could be. Where do you think you're doing that? – Daniel Roseman Dec 29 '16 at 17:53 


I thought I was initialising in my app.py, this was not the case and needed to call for the initialisation in the admin class. I didn't think this was required but clearly an oversight by a novice. Please post as an answer and I'll mark it as accepted. Thank you – the_frank Dec 30 '16 at 11:41 
0

您需要创建Database类的一个实例调用find_sort上。然后,您可以使用Python selfkeyword

class Database(object): 
    URI = "mongodb://127.0.0.1:27017" 
    DATABASE = None 

    @staticmethod 
    def initialize(self): 
     client = pymongo.MongoClient(self.URI) 
     self.DATABASE = client['cvm'] 

    @staticmethod 
    def find_sort(self, collection, query, direction, limit): 
     return self.DATABASE[collection].find({}).sort(query, direction).limit(limit) 

那么这应该工作:

Database().find_sort(AdminConstants.COLLECTION, "admin.created_date", -1, 1) 
+0

谢谢你的回答。这实际上是代表我的一个疏忽,我相信我的app.py会初始化整个应用程序的数据库,而我需要在一个类需要它时初始化。 –

相关问题