【问题标题】:How to delete a record using GQL?如何使用 GQL 删除记录?
【发布时间】:2012-02-02 22:57:40
【问题描述】:

我需要迭代并删除我的数据存储区的所有记录。我正在使用 Google App engine Launcher 在本地主机上对其进行测试。怎么做?

当我试图以这种方式删除 Person 模型中的所有记录时:

 qObj = Person.all()
 db.delete(qObj)

我收到错误BadValueError: Property y must be a str or unicode instance, not a long 我猜模型数据类型有冲突。

class Person(db.Model):
    name = db.StringProperty()
    x = db.StringProperty()
    y = db.StringProperty()
    group = db.StringProperty()

字段 y = db.StringProperty() 以前是 y = db.IntegerProperty()。 此时我需要刷新所有数据库记录。我该怎么做?

是否有机会删除存储所有数据库记录的本地文件?

【问题讨论】:

  • 当您执行 qObj = Person.all() 时,您将 qObj 设置为 Person 对象列表。据我所知,您不能在该列表上调用 delete - 您必须遍历列表并分别删除每个对象。
  • code.google.com/appengine/docs/python/datastore/… ... delete(models) 从数据存储中删除一个或多个模型实例。参数:models 模型实例、实体的 Key 或模型实例的列表(或其他可迭代)或要删除的实体的键。
  • 我刚刚尝试了db.delete( Person.all() ),使用您的确切Person 模型,它完美地工作(从数据库中清除所有Person 对象)

标签: python gql


【解决方案1】:

只是为了分享关于已接受答案的有用提示。

您可以使用 db.delete 执行以下操作:

persons = Person.all()
d = []
for p in persons:
    d.append(p)

db.delete(d)

这节省了大量的数据库操作。

【讨论】:

  • 我认为这是非常低效的。您正在创建一个完整的其他数组,但您不需要。
  • 这给出了一个错误 "AttributeError: 'list' object has no attribute 'delete'" 建议?
【解决方案2】:

GQL 语言只能用于检索实体或键(参见http://code.google.com/appengine/docs/python/datastore/gqlreference.html

你必须这样做:

persons = Person.all()

for p in persons:
    p.delete()

关于错误BadValueError: Property y must be a str or unicode instance, not a long,您必须修改数据库中的所有数据(从整数到字符串)才能解决冲突。

您似乎想删除所有内容,因此另一种解决方案是转到数据存储管理页面 - 本地主机上的 http://localhost:8080/_ah/admin 或通过 https://appengine.google.com/ - 并删除所有内容。

您可能会发现这很有用:http://code.google.com/appengine/articles/update_schema.html

【讨论】:

  • 这是不正确。您不需要明确的for。这要么已修复,要么有其他问题
【解决方案3】:

如果您有一个在数据库中存储记录的变量,那么您可以简单地使用 delete()。

也就是说,假设你有一个名为 Persons 的实体,你可以这样做:

personToDelete = db.GqlQuery("SELECT * FROM Persons WHERE name='Joe'");
person = personToDelete[0];
person.delete();

您还必须导入数据库库,但鉴于您显然在使用数据库,我假设您还是这样做了。

【讨论】:

  • 这给了我们一个错误:“查询”对象不支持索引。我们缺少什么?
猜你喜欢
  • 2019-07-11
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多