Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用google app engine更新数据存储中的Column名称_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python 如何使用google app engine更新数据存储中的Column名称

Python 如何使用google app engine更新数据存储中的Column名称,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我有一个实体,其冒号名为geocode,最初为空值。 我想更新数据存储中地理代码column的值 我尝试使用下面的代码片段,但没有成功。请帮忙。提前谢谢 数据存储 class doctor(db.Model): doctorUser=db.UserProperty() geocode=db.GeoPtProperty() 更新医生姓名的功能 def post(self): user=users.get_current_user() q=doctor.all().filt

我有一个实体,其冒号名为geocode,最初为空值。 我想更新数据存储中地理代码column的值

我尝试使用下面的代码片段,但没有成功。请帮忙。提前谢谢

数据存储

class doctor(db.Model):
doctorUser=db.UserProperty()
    geocode=db.GeoPtProperty()
更新医生姓名的功能

def post(self):
    user=users.get_current_user()
    q=doctor.all().filter("doctorUser =",user)
    if q.count()==1:
        lat=self.request.get('lat')
        lng=self.request.get('long')
        code=str(lat)+", "+str(lng)
        q[0].geocode=code
        q[0].put()
已解决

这是我所做的改变,它成功了

def post(self):
    user=users.get_current_user()
    q=doctor.all().filter("doctorUser =",user)
    qo=q.get()
    if q.count()==1:
        lat=self.request.get('lat')
        lng=self.request.get('long')
        code=str(lat)+", "+str(lng)
        qo.geocode=code
        qo.put()

如果您试图处理查询对象,则需要获取或迭代查询,或使用get()获取结果。您正在使用的查询可能返回多个结果,。除非您在其他地方有确保
doctorUser
的唯一值的逻辑

在进入循环之前,从请求中获取lat/long

您还应该停止在列名方面考虑数据存储和模型。这些是实体的属性,appengine数据存储中没有列

虽然您的解决方案更新了原始问题,但它可能会起作用,效率低下。例如,您获得一个实体,然后执行count(),该操作将重新运行相同的查询。我已经重写了它以提高效率,但是仍然存在潜在的问题(例如多个记录匹配
doctorUser=user

def post(self):
    user=users.get_current_user()

    if user:  # if user not logged in user will be None

       qo=doctor.all().filter("doctorUser =",user).fetch(10)

       if len(go) > 1:
           raise ValueError('More than one doctorUser matches')

       if go:
           lat=self.request.get('lat')
           lng=self.request.get('long')
           code=str(lat)+", "+str(lng)
           qo.geocode=code
           qo.put()

很抱歉,在描述这个问题时,在google app engine数据存储中使用了错误的术语。我不太担心这个错误的术语,只是它倾向于表明当涉及到使用数据存储对其应用程序进行建模时,人们是这样想的。如果你在rela中考虑,这往往会导致数据模型设计出现问题国际术语。