googleappengine(Python)数据存储正在复制实体

2024-10-04 05:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是pythonsdkforgoogleappengine,还有瓶子。在

运行类似这样的简单操作来设置一些要使用的实体:

@bottle.route('/test')
def testing():
    Statistic(team_id = 2, qty_customers = 600).put()
    Statistic(team_id = 3, qty_customers = 5).put()
    return "Done."

统计如下:

^{pr2}$

我希望它为每个实体创建一个实体,并将它们添加到数据存储中。它为每个副本创建两个副本,并将它们添加到数据存储中。在

如何使代码只添加一个实体?在

为什么要创造两个呢?在

编辑: 为了澄清,我只运行testing()函数一次,它创建了4个实体。每个副本两份。在


Tags: 数据test实体id瓶子bottleput副本
1条回答
网友
1楼 · 发布于 2024-10-04 05:31:41

在旧数据库(db.Model)中,创建实例时必须指定key_name。在

在新的DB(ndb.Model)中,需要指定id,否则将选择递增整数。在

因此,两次调用函数testing会产生4个不同的Statistic实例,ID分别为1、2、3和4。在

如果为每个Statistic实例显式指定一个不同的ID,则只能得到两个实例。在


我认为在您的情况下,您最好删除team_id字段:

class Statistic(ndb.Model):
    qty_customers = ndb.IntegerProperty()

然后,为您创建的每个Statistic实例指定一个唯一的ID:

^{pr2}$

顺便说一句,我认为建议使用字符串ID而不是整数ID:

def testing():
    Statistic(id = '2', qty_customers = 600).put()
    Statistic(id = '3', qty_customers = 5).put()

更新:

即使您只在应用程序中调用函数testing,GAE通常会创建并销毁应用程序实例本身。因此,每次创建应用程序的新实例时,也会创建一对新的Statistic实例。如果这些实例不在数据库中,那么当您调用函数put时,它们会被添加到数据库中(这就是为什么您需要为每个实例指定一个ID)。在

相关问题 更多 >