【问题标题】:Saving entities in django-nonrel with google appengine使用 google appengine 在 django-nonrel 中保存实体
【发布时间】:2012-01-03 20:04:48
【问题描述】:

更新:我注意到当我使用视图(和 create_object 函数)保存实体时,实体被保存(并且在数据存储查看器中可用)。但是当我使用 shell (manage.py shell) 创建和保存新实体时,它并没有提交到存储中(但仍然可以在 Tes.objects.all() 中看到)。


我开始在 google appengine 中使用 django-nonrel,但我对保存实体这样简单的事情感到沮丧。

我已经按照instruction 中的说明设置了我的环境。我设法运行示例应用程序并且运行正常。我想扩展它,以便将我的实体保存到存储中。这样做:

  1. 我用 models.py 添加了新的 django 模块:

    from django.db import models
    
    class Tes(models.Model):
        name = models.CharField(max_length=150)
    
  2. 我创建了一个脚本来保存一些数据:

    import os
    import sys
    sys.path.append("d:\\workspace\\project\\")
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    from testmodule.models import Tes
    t = Tes(name="test")
    t.save()    
    tes = Tes.objects.all()
    for t in tes:
        print t.name
    

脚本运行没有错误。当我一次又一次地运行它几次时,它会打印越来越多的“测试”字符串。但是,当我尝试在休息一分钟后运行它时, Tes.objects.all() 什么也没有返回。在此期间,数据存储文件会更改其大小(但也许这只是某种日志)。当我查看http://localhost:8000/_ah/admin/datastore 时,我只能从选择字段中选择 AhAdminXrsfToken

无论如何,我错过了什么?在哪里可以找到可以告诉我问题所在的某种日志?

【问题讨论】:

    标签: python google-app-engine django-nonrel


    【解决方案1】:

    这是一个引起很多混乱的问题。来自djangoappengine docs

    另外,切勿将 manage.py runserver 与其他管理一起运行 同时命令。更改不会生效。那是一个 App Engine SDK 限制可能会在以后的版本中得到修复。

    所以你不能同时做manage.py runservermanage.py shell。如果这样做,对其中一个数据存储的更改将不会在另一个中可见。 App Engine SDK 对本地数据存储区实施了锁定。确保在启动 shell 之前已停止服务器。

    【讨论】:

      【解决方案2】:

      如果您正在创建一个实体而不是保存它,不应该是t.put() 吗?我使用put() 创建一个实体,它对我有用。如果您导入 django,您可能想知道 django 的替代品,例如我的选择 GAE + Jinja2 + WTForms,尤其是现在不推荐使用 google.db.djangoforms 为表单选择表单框架、模板引擎,也许还有 db 框架而且您不必导入 django,这通常会导致您导入的内容超出您的需要。

      所以我的建议是避免使用import django...,而是使用 Jinja2 + WTForms。如果你真的想在应用程序引擎上使用 django,那么你可能想签入项目 www.allbuttonspressed.com,它为谷歌应用程序引擎启用所有 django,但是当我怀疑我们需要的只是一个模板引擎和一个表单框架,我们可以不用 django。

      【讨论】:

      • 这确实不能回答问题。
      • “我错过了什么?”有人问我,我的回答是保存和创建之间的区别。我想说的是,它可能是使用 save() 和 put() 进行保存和创建之间的区别,并且完整的 django 有很好的替代方案。
      猜你喜欢
      • 1970-01-01
      • 2011-10-31
      • 2014-09-11
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多