Google App Engine 模型的自定义键 (Python)

2023-11-24

首先,我对 Google App Engine 还比较陌生,所以我可能做了一些愚蠢的事情。

假设我有一个 Foo 模型:

class Foo(db.Model):
   name = db.StringProperty()

我想用name作为每个人的唯一钥匙Foo目的。这是怎么做到的?

当我想要得到一个特定的Foo对象,我当前查询数据存储中的所有对象Foo具有目标唯一名称的对象,但查询速度很慢(而且很难确保name每个新的都是独一无二的Foo被建造)。

必须有更好的方法来做到这一点!

Thanks.


我之前在项目中使用过下面的代码。只要您基于密钥名称的字段是必需的,它就可以工作。

class NamedModel(db.Model):
    """A Model subclass for entities which automatically generate their own key
    names on creation. See documentation for _generate_key function for
    requirements."""

    def __init__(self, *args, **kwargs):
        kwargs['key_name'] = _generate_key(self, kwargs)
        super(NamedModel, self).__init__(*args, **kwargs)


def _generate_key(entity, kwargs):
    """Generates a key name for the given entity, which was constructed with
    the given keyword args.  The entity must have a KEY_NAME property, which
    can either be a string or a callable.

    If KEY_NAME is a string, the keyword args are interpolated into it.  If
    it's a callable, it is called, with the keyword args passed to it as a
    single dict."""

    # Make sure the class has its KEY_NAME property set
    if not hasattr(entity, 'KEY_NAME'):
        raise RuntimeError, '%s entity missing KEY_NAME property' % (
            entity.entity_type())

    # Make a copy of the kwargs dict, so any modifications down the line don't
    # hurt anything
    kwargs = dict(kwargs)

    # The KEY_NAME must either be a callable or a string.  If it's a callable,
    # we call it with the given keyword args.
    if callable(entity.KEY_NAME):
        return entity.KEY_NAME(kwargs)

    # If it's a string, we just interpolate the keyword args into the string,
    # ensuring that this results in a different string.
    elif isinstance(entity.KEY_NAME, basestring):
        # Try to create the key name, catching any key errors arising from the
        # string interpolation
        try:
            key_name = entity.KEY_NAME % kwargs
        except KeyError:
            raise RuntimeError, 'Missing keys required by %s entity\'s KEY_NAME '\
                'property (got %r)' % (entity.entity_type(), kwargs)

        # Make sure the generated key name is actually different from the
        # template
        if key_name == entity.KEY_NAME:
            raise RuntimeError, 'Key name generated for %s entity is same as '\
                'KEY_NAME template' % entity.entity_type()

        return key_name

    # Otherwise, the KEY_NAME is invalid
    else:
        raise TypeError, 'KEY_NAME of %s must be a string or callable' % (
            entity.entity_type())

然后您可以像这样修改示例模型:

class Foo(NamedModel):
    KEY_NAME = '%(name)s'
    name = db.StringProperty()

当然,在您的情况下,这可以大大简化,改变第一行NamedModel's __init__方法类似:

kwargs['key_name'] = kwargs['name']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App Engine 模型的自定义键 (Python) 的相关文章

  • django_openid_auth TypeError openid.yadis.manager.YadisServiceManager 对象不是 JSON 可序列化

    I used django openid auth在我的项目上 一段时间以来它运行得很好 但今天 我测试了该应用程序并遇到了这个异常 Environment Request Method GET Request URL http local
  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • 如何在 python 中没有 csv.reader 迭代器的情况下解析单行 csv 字符串?

    我有一个 CSV 文件 需要重新排列和重新编码 我想跑 line line decode windows 1250 encode utf 8 在由 CSV 读取器解析和分割之前的每一行 或者我想自己迭代行 运行重新编码 并仅使用单行解析表单
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • Google App Engine 超时:数据存储操作超时,或数据暂时不可用

    这是我每天都会在应用程序日志中看到的一个常见异常 通常每天 5 6 次 流量为 1K 访问 天 db error trying to store stats Traceback most recent call last File base
  • 如何为每个屏幕添加自己的 .py 和 .kv 文件?

    我想为每个屏幕都有一个单独的 py 和 kv 文件 应通过 main py main kv 中的 ScreenManager 选择屏幕 设计应从文件 screen X kv 加载 类等应从文件 screen X py 加载 Screens
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x

随机推荐

  • 后置和前置增量运算符

    当我运行以下示例时 我得到输出 0 2 1 class ZiggyTest2 static int f1 int i System out print i return 0 public static void main String ar
  • Android 中的 TTS 暂停

    我正在开发一个应用程序 它可以读出文档中的文本 我想添加暂停和恢复功能 但我在 TTS 中找不到任何暂停 方法 有什么办法可以让我暂停吗 有一个方法可以暂停 只需致电TextToSpeech playSilence 请参阅下面的代码here
  • 跨源请求被阻止 Spring REST 服务 + AJAX

    无法调用spring REST服务 我的春季服务 RequestMapping value MAS authenticate method RequestMethod POST public ResponseEntity
  • 将掩码应用于字符串

    我正在从表中读取字符串 ID 值 当用户输入 ID 时 是使用用户定义的输入掩码完成的 因此掩码可能类似于000 00 0000 AA 9999999等 掩码会因用户而异 因此必须在运行时进行评估 鉴于表中仅存储字母数字文本 那么应用该掩码
  • 如何删除 Logstash 过滤器中所有具有 NULL 值的字段

    我正在使用 Logstash 读取 csv 格式的检查点日志文件 并且某些字段具有空值 我想删除所有具有空值的字段 我无法准确预见哪些字段 键 将具有空值 因为我的 csv 文件中有 150 列 并且我不想检查其中的每一列 是否可以在log
  • 如何按特定字段对 Spark DataFrame 中的结构类型数组进行排序?

    给出以下代码 import java sql Date import org apache spark sql SparkSession import org apache spark sql functions object SortQu
  • 在 LLDB 调试器中显示变量属性的值?

    我正在使用 Log Message 操作的断点 并且我想打印 NSIndexPath 的行 所以我尝试 cell row indexPath row 但什么也没有打印出来 我还尝试使用调试器命令 expr void NSLog indexP
  • psql:无法将主机名“somePostgres”转换为地址:名称或服务未知

    我正在 docker 中构建 java spring mvc 应用程序 并且 dokefile 构建涉及与 postgres 容器交互 每当我跑步时docker compose updockerfile 中与 postrges 交互的步骤有
  • 使用 lift-json 将 Json 值提取为 Map

    lift json 的文档表明我应该能够调用 values 来获取当前的 JObject 结构作为普通的 Scala Map 这种方法对我来说不起作用 因为 值 的返回类型是 json Values 而不是示例所示的 Map 我究竟做错了什
  • 运算符“>=”不能应用于“string”和“string”类型的操作数

    我在 C 中使用实体框架 我的代码是 var result ef services Where entry gt entry tarikhservice gt textBoxX1 Text entry tarikhservice lt te
  • AWS Athena (Presto) OFFSET 支持

    我想知道 AWS Athena 是否支持 OFFSET 对于 mysql 以下查询正在运行 但在 athena 中它给了我错误 任何例子都会有帮助 从员工中选择 其中 empSal gt 3000 LIMIT 300 OFFSET 20 A
  • 如何自定义 Hibernate @Size 错误消息以指示输入字段的长度

    我想自定义文本字段的错误消息以包含输入的实际字符数 我已经能够做到这一点 但对我的解决方案不满意 所以我想知道其他人做了什么来实现这一目标 春季4 1 2 休眠4 3 10 休眠验证器 5 1 3 字段注释 出于测试目的 仅限 10 个 实
  • 应用程序在 CoreData 保存时冻结

    我有一个 iPhone 应用程序 在保存 CoreData 时有时会冻结 然后不会重新启动 我确实有第二个线程使用数据库 但我认为我已经遵循该模式为该线程创建单独的上下文 这是重新启动后的崩溃报告 有任何想法吗 我尝试将其更改为仅使用一个线
  • Android OpenGL ES 2.0 内存中仅限制 16 个纹理?

    基本上 当我在 Android Studio 中使用 OpenGL ES 2 0 开发应用程序时 我遇到了一个无法解决的大问题 并且它已经困扰我大约一周了 因此 每当我在内存中加载超过 16 个 可能是 17 个任意大小的纹理 并尝试通过
  • iomanip 函数是如何实现的?

    一些标准iomanip函数带有一个参数 我想知道这是如何实现的 例如 我可以用函数做类似的事情吗 这确实是我需要的解决方案这个答案 但我不知道该怎么做 当我查找定义时setw函数例如在http en cppreference com它将返回
  • 多个下拉按钮 – 一次只能打开一个(JS/jQuery)

    我一直在尝试创建两个语言选择下拉按钮 我成功使用了这个 W3Schools 模板 然而 这个解决方案有两个缺点 1 您需要 每个下拉按钮一个脚本或对该脚本的修改 2 你可以同时打开两个下拉按钮 这是我不想要的 我找到了类似问题的解决方案he
  • Visual Studio 中 Ajax 和 JavaScript 库的 IntelliSense

    我知道使用 vsdoc js 文件智能感知 并且 jQuery 的那个很容易找到 还有哪些其他 JavaScript Ajax 和 DHTML 库拥有这些文件 在哪里可以找到这些文件 另外 是否有一个文档概述了 vsdoc js 文件的规范
  • 取消设置会话变量时出现问题

    我的网站上有一个用于邀请朋友的表格 这是一个简单的文本字段和一个提交按钮 如果出现错误 我会重定向回此页面并显示错误消息 如果它们是会话变量集 if isset SESSION invite error echo SESSION invit
  • 为什么我会收到关于初始化器不是常量的错误?

    我正在使用以下代码 const int X ORIGIN 1233086 const int Y ORIGIN 4728071 const int Z ORIGIN 4085704 const int xyzOrigin NUM DIMEN
  • Google App Engine 模型的自定义键 (Python)

    首先 我对 Google App Engine 还比较陌生 所以我可能做了一些愚蠢的事情 假设我有一个 Foo 模型 class Foo db Model name db StringProperty 我想用name作为每个人的唯一钥匙Fo