AttributeError:'module'对象没有属性'get_or_insert'

时间:2017-01-26 19:54:40

标签: python google-app-engine datastore

我正在尝试使用Google的数据存储区创建一个简单的python应用程序,该数据存储区存储电子邮件的新闻稿而不存储重复的电子邮件,但我的代码却抛出了错误AttributeError: 'module' object has no attribute 'get_or_insert' 1.如何修复错误? 2.如果电子邮件确实存在,并且“subscribed”= false,我该如何将其更新为True?

import webapp2
import json

from google.appengine.ext import ndb

class Email(ndb.Model):
    subscribed = ndb.BooleanProperty()

    @staticmethod
    def create(email):
        ekey = ndb.Key("Email", email)
        entity = ndb.get_or_insert(ekey)
        if entity.subscribed:  ###
            # This email already exists
            return None
        entity.subscribed = True
        entity.put()
        return entity

class New(webapp2.RequestHandler):
    def post(self):
        Email().create(self.request.get('email'))

        self.response.headers['Content-Type'] = 'application/json'   
        obj = {
            'success': True
            }
        self.response.out.write(json.dumps(obj))


app = webapp2.WSGIApplication([
    webapp2.Route(r'/parse', New),
], debug=True)

1 个答案:

答案 0 :(得分:0)

get_or_insertndb.Model类的方法,而不是ndb模块的方法,请参阅Class Methods

所以你可能想要使用

entity = ndb.Model.get_or_insert(ekey)

甚至

entity = Email.get_or_insert(ekey)