【问题标题】:Does Google Webapp framework for Google App Engine maintain a link to the database?Google App Engine 的 Google Webapp 框架是否维护到数据库的链接?
【发布时间】:2010-12-30 21:08:23
【问题描述】:

1) 当脚本使用 db.Model.get_element_by_id("id") 方法从数据库中获取数据时,它指的是什么 id,以及如何从数据库中获取它。
2)如果您使用此方法获得结果,该结果是否维护到数据库的链接,以便对结果的任何更改都反映在数据库上?如果没有,您将如何更新数据库中的条目?

【问题讨论】:

  • 这些问题在 Google 提供的教程中得到解答。
  • 我已经完成了 Google 教程,但没有看到那里的答案,或者在阅读文档时
  • 你是在问数据库是否持久化数据?
  • 我在下面回答以显示文档在哪里回答了您的问题。 (很难在评论中格式化内容。)

标签: python database google-app-engine reference web-applications


【解决方案1】:

正如 Jonathan Feinberg 所建议的,这在 Google App Engine 教程中得到了解答。教程的相关部分可在此处找到:http://code.google.com/appengine/docs/python/gettingstarted/usingdatastore.html

在该页面上,此文本专门回答了您有关“您将如何更新数据库中的条目:

最后,greeting.put() 将我们的新对象保存到数据存储区。如果我们从查询中获取此对象, put() 将更新现有对象。由于我们使用模型构造函数创建了这个对象,因此 put() 将新对象添加到数据存储区。

在此文档页面上可以找到有关键等的说明:http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html

最后的建议是,不要担心“维护与数据库的连接”之类的事情。 Google App Engine 的整个前提是它们已经抽象出连接管理之类的东西,这样您就可以从平台固有的可扩展性中受益。坚持文档并了解可用的库和框架将是通往成功的最佳途径。

【讨论】:

    【解决方案2】:

    数据库中的每个实体都可以有一个数字 ID 或一个键名; get_by_id 类方法实际上可以通过任一方式获取,具体取决于您传递给它的是一个数字(然后它会查找该 ID)还是一个字符串(然后它会查找该键名)。 (你也可以给它传递一个包含数字、数字和字符串等的列表)。

    给定一个实体x,你可以通过k = x.key()得到一个Key对象k,然后k.id()返回实体x的数字ID(如果实体没有数字,则返回None ID),k.name() 返回名称或None(您也可以通过if k.has_id_or_name(): 检查是否存在,并获取两者中的任何一个,或者None 如果两者都不存在,则通过k.id_or_name()

    没有“链接”; ID 或键名可以被认为是数据库中实体的唯一“主键”(实际上它会自动与其他一些元数据(如应用程序名称)混合在一起;-)。当您 put 现有实体(在 get对其进行更改并更改某些内容之后)时,该主键允许数据库覆盖现有实体而不是创建新实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多