python - App Engine 数据存储区查询问题

标签 python google-app-engine google-cloud-datastore tipfy

我尝试运行的几个查询遇到了奇怪的问题。

我构建了一个方法,它返回查询结果的元组-

def get_activeproducts():
    query = Product.gql("WHERE active = True")
    choices = []
    for obj in query:
        choices.append((str(obj.key()), obj.name))
    return choices

问题是,每次调用的结果都是相同的。即使产品被删除或在产品属性“active”中更改为“False”。只有当我重新启动sdk服务器时才会刷新结果。在生产中,除非我更改版本,否则它不会改变。

我在另一个查询中发现了类似的问题,其中查询属性为 BooleanProperty。

知道如何解决这个问题吗?

编辑: 我正在一个tipfy应用程序中使用该方法。它用于填充 wtforms 中的选择字段。 “choices”基本上接受元组(值、名称)对的列表。

class InvoiceForm(Form):
    product = SelectField('Product', choices=get_activeproducts())

我对编辑没有任何问题。当我从管理端检查时,我可以看到某些产品被设置为“False”。即使我清空(删除)整个产品列表,我也会得到与第一次相同的列表。

我没有在应用程序的任何地方使用缓存。

最佳答案

当实例启动时,App Engine 运行时会缓存您的类定义,默认设置为实例启动时的值。要使选择动态化,您需要在运行时设置它们。

来自 wtforms(tipfy 正在使用 IIRC)文档的示例;需要针对 App Engine 查询进行调整:

class UserDetails(Form):
    group_id = SelectField(u'Group', coerce=int)

def edit_user(request, id):
    user = User.query.get(id)
    form = UserDetails(request.POST, obj=user)
    form.group_id.choices = [(g.id, g.name) for g in Group.query.order_by('name')]

关于python - App Engine 数据存储区查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5077274/

相关文章:

python - 如何在没有在谷歌应用引擎中读取数据存储的情况下从实体实例获取引用实体属性的键名?

google-app-engine - 应用引擎 : Query datastore for columns with a hyphen in its name

python - 如何打印出来!在皮亚姆尔?

python - 重新使用分类 CNN 模型进行自动编码 - pytorch

python - GQLQuery 检索空结果集

google-app-engine - 如何在带有 HTML5 音频标签的 jsp 文件中使用应用程序引擎的 blob 存储的 Blob-key 播放 mp3 文件?

google-app-engine - 从数据存储中获取大型 JSON

java - 无法对 DATASTORE 中的数据进行排序

python - python中的数组操作

python字典列总和