使用google appengine在django-nonrel中保存实体

szy*_*ond 6 python google-app-engine django-nonrel

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


我开始玩带有google appengine的django-nonrel,我对拯救实体这么简单的事感到沮丧.

我按照说明中的描述设置了我的环境.我设法运行示例应用程序,它运行正常.我想扩展它,以便将我的实体保存到存储中.为此:

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

    from django.db import models
    
    class Tes(models.Model):
        name = models.CharField(max_length=150)
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

Wil*_*hes 4

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

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

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