我在Windows7上运行googleappenginedevserver1.3.3。在
通常,此方法工作正常,但这一次却出现了错误:
def _deleteType(type):
results = type.all().fetch(1000)
while results:
db.delete(results)
results = type.all().fetch(1000)
错误:
^{pr2}$
我做错什么了?这一次怎么会失败,但通常不会?在
UPDATE我重新启动了devserver,当它重新联机时,数据存储是空的。在
Tags:
不幸的是,1.3.3太晚了,我无法查看它的源代码并尝试精确地诊断您的问题-SDK没有1.3.3的发布标记,我无法猜测1.3.3中的
datastore_filestub.py
的哪个版本。能否升级到当前版本1.3.5,然后重试?不建议运行旧版本(尤其是2+版本),因为它们可能与Google实际服务器上的实际版本不同步(和/或有在以后版本中修复的bug)。不管怎样。。。在在Windows上,
os.rename
不起作用,如果目标存在,但是我看到的修订小心地捕捉到结果的OSError
(WindowsError
从中派生),删除现有文件,然后重新尝试重命名。所以我不知道如果你正在运行的SDK的源代码有这么仔细的安排,我想他们会这样做的话,你的bug会被什么解释。在另外,我建议使用
use_sqlite
(参见nickjohnson的博客宣布了这一点here),而不是SDK数据存储的文件存根-这似乎更有意义!-)在(免责声明:我不是在回答您的问题,而是帮助您优化正在运行的代码)
你的代码似乎在大量删除对象。在SDK/dev服务器中,您可以使用以下命令完成清除数据存储,这是一种更快、更方便的替代方法:
现在,也就是说,如果您想擦除整个SDK数据存储。如果没有,那当然不要用。:-)
更重要的是,如果将查询更改为以下类型,则可以使代码运行更快,并在生产上使用更少的CPU:
^{pr2}$它的工作原理与您的相同,只是它只获取密钥,因为您不需要从数据存储中检索完整的实体来删除它们。另外,您的代码当前正在设置
SIZE=1000
,但您可以将其设置得更大,特别是如果您知道系统中有多少实体。。。1000个结果限制在1.3.1http://bit.ly/ahoLQp中被取消一点点。。。不要使用
type
作为变量名。。。这是Python中最重要的导入对象和内置/工厂函数之一。如果你这样做的话,你的代码可能会有点奇怪,因为你在一个函数/方法里面,它只会稍微好一点,但是作为一个全局变量,这不是真的。在希望这有帮助!在
相关问题 更多 >
编程相关推荐