gpt4 book ai didi

python - 令人困惑的 App Engine 数据存储问题 (ListProperty)

转载 作者:行者123 更新时间:2023-12-01 00:00:14 25 4
gpt4 key购买 nike

好的,我在本地和 gae 云中都有相同的 python 代码。

当我在本地存储实体时,设置元素类型 datetime.datetime 的 ListProperty 字段在数据存储查看器中看起来像这样:

2009-01-01 00:00:00,2010-03-10 00:00:00

当我将其存储在云上时,查看器显示:

[datetime.datetime(2009, 1, 1, 0, 0), datetime.datetime(2010, 3, 9, 0, 0)]

为什么有不同的表示方式?

这不会打扰我,只有当我在云上查询此字段时,查询无法找到匹配的实体(它应该并且在本地确实如此) - 让我相信正是这种不同的表示形式导致了麻烦。我应该重复一遍 - 代码是相同的。

有人想到发生这种情况的原因以及解决方案吗?

更新:我的查询如下(使用过滤器):

from x import y
from datetime import datetime
from google.appengine.ext import db

q = y.EntityType.all().filter('displayDateRange <=',datetime.now()).filter('displayDateRange >=',datetime.now())

usersResult = q.fetch(100)
print `len(usersResult)`

结果应该是 1,而不是 0。

实际上,问题在于具有指定值 datetime.datetime 的 ListProperty - StringListProperty 上的查询在云上按预期工作。

我通过本地和云上的交互式控制台尝试了原始过滤器,但云没有给我任何结果。所以这是一个数据存储问题,我假设它必须与存储格式有关 - 我在两个数据存储中只有一个实体值,ListProperty 如下所示:

2009-01-01 00:00:00,2010-03-09 00:00:00
[datetime.datetime(2009, 1, 1, 0, 0), datetime.datetime(2010, 3, 9, 0, 0)]

分别在本地和云端。

有什么想法吗?

进一步更新

用硬编码的日期时间对象替换了 datetime.now() - 示例过滤器现在看起来像:

y.EntityType.all().filter('displayDateRange <=',datetime(2009,11,24)).filter('displayDateRange >=',datetime(2009,11,24))

注意上面的日期时间 ListProperty 范围从 1.1.2009 到 3.9.2010 这应该返回上面的实体 - 我在本地主机开发服务器上尝试了这个相同的过滤器,它确实这样做了。云及其 datetime.datetime ListProperty 的不同表示形式则不然。

请注意,这取自 current best practice for filtering on date range

有什么想法可能是错误的吗?

最佳答案

好吧,长话短说:它现在被归类为应用程序引擎开发服务器版本中的错误,并且生产云数据存储区不再支持。

blog post 中填写了进一步的说明,查看第 3 点。

关于python - 令人困惑的 App Engine 数据存储问题 (ListProperty),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com