2016-12-29 3 views
0

일부는 파이썬으로 재미있어졌지만 새롭고 예리하지만 패배했습니다. 도움을 주시면 대단히 감사하겠습니다.python3/pymongo "TypeError : 'NoneType'객체는 클래스 내에서 subscriptable이 아닙니다.

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

이 클래스 아래에 앉아 None을 반환 할 나타납니다 : 나는 플라스크 앱 내에서 몽고를 조회하려고, 내가 뭔가를 누락되었거나과 불법적 인 작업을 수행 한 것으로 나타났습니다. 클래스가없는 명령을 실행하면 명령 줄에 값이 반환되므로이 경우가 아니어야합니다. 누군가 나를 위해 이것을 정리해주기를 바랍니다. 클래스 외부에서이 작업을 수행하면 오류가 발생합니다. 터미널에서 작동하는 것을보고 매우 좌절감을 느끼고 필요한 곳에서 오류가 발생합니다.

편집 : 데이터베이스는 당연히 프로그램의이 시점에서 초기화됩니다. 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

가 초기화되지 않았습니다. 나는 이것을 이전의 부르심에서부터 가져 왔다고 믿었지만, 반원들에게 요구되었다.

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

find_sort을 호출하려면 Database 클래스의 인스턴스를 만들어야합니다. 그런 다음이 작동합니다 파이썬 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) 

를 사용할 수 있습니다

다니엘 Roseman하여, 데이타베이스를 발견으로
Database().find_sort(AdminConstants.COLLECTION, "admin.created_date", -1, 1) 
+0

답변 해 주셔서 감사합니다. 이것은 실제로 내 대신에 감독이었고, 나는 내 app.py가 전체 앱에 대한 데이터베이스를 초기화 할 것이라고 믿었지만 클래스가 필요할 때 초기화해야했습니다. –