问题标签 [natural-key]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
753 浏览

django - 包含另一个自然键的自然键的 Django 反序列化

我正在创建一个记录玩家统计数据的模型。
通过首先手动输入数据点,我可以让 Django 使用自然键将数据序列化到一个 json 文件中,使用dumpdata --natural. 我的计划是复制这种序列化格式以大量插入其他数据点;问题是 Django 不会使用loaddata. 抛出的错误是

DeserializationError: int() 参数必须是字符串或数字,而不是“列表”

我已经稍微简化了抱怨的 json 数据,但它看起来像这样:
{"pk": 1, "model": "nba.metric", "fields": {"player": ["Kobe Bryant", ["Lakers", 2012]]}}

我的模型是这样的:

非常感谢任何输入,谢谢!

0 投票
1 回答
6872 浏览

django - 模型管理器可以访问其模型的元属性(`Meta.unique_together`)吗?

这是我对广义自然键模型管理器的尝试。就像文档一样,除了它尝试(不成功)从 Meta.unique_together 属性中确定自然键字段名称。

如果我在 for 循环之前插入调试打印,如下所示:

它根本没有列出 unqiue_together 属性:

“抽象”有点让我担心,但另一个调试打印显示我尝试使用自然键管理的模型不是抽象的:

我混合了很多抽象基类。这可能是问题吗?

为了完整起见,这里是其中一种混合:

硬编码的模型管理器工作得很好:

0 投票
2 回答
1294 浏览

django - 无法在 django 外键序列化中使用自然键

所以问题是我有一个有外键的类。

这是我的代码

现在,像往常一样,当我这样做时

json 输出包含 Pop 的“id”而不是我想要的名称。

所以我使用了 Manager 类,这是我现在的 Pop 类-

但在此之后,当我这样做时

我收到一个错误,TypeError: Equipment: eq1 is not JSON serializable

我也尝试过 wadofstuff 用于外键的序列化,但显然在 Django1.5 中,simplejson 和 json 之间存在冲突,并且查询抛出错误。所以我回到第一方。

任何帮助将不胜感激。我已经把头发分开了好几个小时。

0 投票
3 回答
1048 浏览

sql - 代理键“偏好”解释

据我了解,自然键的纯粹主义者和代理键的纯粹主义者之间正在进行一场战争。喜欢这篇文章(还有更多)的人说“自然键对你不好,总是使用代理......

但是,我要么是愚蠢的要么是盲目的,但我看不到总是拥有代理键​​的理由!

假设您在配置中有 3 个表,如下所示:链接表

为什么我需要一个代理键呢?我的意思是没有它是完全有道理的。

另外,有人可以解释一下为什么主键永远不应该根据代理键纯粹主义者而改变吗?我的意思是,如果我说color_id VARCHAR(30)并且 key is black,并且我不再需要 black 因为我将其更改为charcoal,那么为什么将blackkey 更改为charcoal以及所有引用列也是一个坏主意?

编辑:刚刚注意到我什至不需要更改它!只需创建一个新的,更改引用列(就像我对代理键所做的一样),然后让旧的保持平静......

在代理键咒语中,我需要然后创建额外的条目,比如id=232name=black. 这对我有什么好处?我在桌子上有一把备用钥匙,我不再需要了。另外我需要加入以获得颜色名称,否则我可以留在一张桌子上并快乐吗?

请向 5 岁的孩子解释一下,请记住,我并不是要说“代理键不好”,我想理解为什么有人会说“总是使用代理键!”之类的话。

0 投票
1 回答
2582 浏览

django - Django 固定主键错误,需要自然键解决方案

所以我有一个 Film 模型,其中包含多对多领域的 Actors 模型列表:

我正在尝试从 json 固定装置加载一些初始数据,但是我遇到的问题是加载多对多参与者字段。例如我得到错误:

DeserializationError: [u"'Anna-Varney' 值必须是整数。"]

使用这些固定装置:

而我的演员夹具看起来像这样:

所以多对多字段必须使用 pk 整数,但问题是数据没有排序,对于一长串演员,我认为手动查找每个演员的 pk 并不实用。我一直在寻找解决方案,似乎我必须使用自然键,但我不确定如何将这些应用于我的模型。

编辑:我已将模型更改为:

但我仍然遇到同样的错误

0 投票
1 回答
941 浏览

python - Get_by_natural_key 抛出 AttributeError?

我在使用 Django 的get_by_natural_key()方法时遇到了问题。(Django 1.6)

我有使用如下代码的项目:ABC_1234.

经理和模特:

在我的测试中,我有这个查询......

...引发此错误:

我想将其code_number用作相关模型夹具的自然键,以及查询此模型的通用方法。

我究竟做错了什么?有什么建议么?

0 投票
1 回答
858 浏览

python - Django natural keys not working for fixtures?

I'm having trouble with fixtures/natural keys in Django. I think I've addressed most of the usual problems, like those specified in this answer.

This might all be a red herring, as get_by_natural_key works just fine in the shell:

What am I doing wrong with the Fixtures?

Django 1.6

models.py

My fixture: pictures.yaml

Error

So, when I run ./manage.py loaddata pictures, I get:

0 投票
1 回答
5413 浏览

python - get_by_natural_key 和 natural_key 之间的区别

据我了解,模型管理器的 get_by_natural_key 用于反序列化,而 natural_key 用于序列化。这是真的 ?如果不是,有什么区别?

而且,我们是否需要始终提供 --natural-foreign 和 --natural-primary 键?有没有办法通过自然键强制序列化/反序列化?

0 投票
1 回答
723 浏览

hibernate-entitymanager - @NaturalId 仅在根实体(或其@MappedSuperclasses)上有效,在联接的多表继承中使用自然 ID

基本上我无法通过在搜索选项卡中粘贴根异常“ @NaturalId 仅在根实体(或其@MappedSuperclasses)上有效”在谷歌中找到一些类似的问题。我正在使用加入的多表继承策略将我的具体/子实体StudentEmployee),包括他们的抽象父Person)映射到我数据库中的三个表,到目前为止我从来没有遇到过问题,直到我意识到我需要使用学生的studentId为我的学生实体实现自定义查询. 我设法从实体管理器中提取了底层的 Hibernate-session,现在我可以清楚地看到并使用我心爱的 HibernateSession 中需要的方法(我们都知道 Hibernate 有用于 naturalIds 的方法,例如(byId、byNaturalId 等)。 ),并且这些方法对于查询实体真的非常有用。所以我只是用@NaturalId注释我的studentId 数据成员,直到.. 我执行了一些操作(保存/创建),然后向我抛出多行异常。而根本原因是..

我将粘贴我的实体的代码以获取更多信息

Parent 抽象基

人物

实体子

学生

问题:我可以做些什么来对不同的学生实体进行唯一查询吗?因为 Hibernate 的 naturalId 方法对于执行诸如 get 或 update 等实体的操作非常有用

是否有任何解决方法可以在不牺牲实体和数据库表的设计的情况下完成我想要的工作?如果可能的话,我希望 studentId 充当 naturalId 。请有任何建议/帮助/意见。任何事情都将不胜感激。

0 投票
2 回答
2700 浏览

mysql - 我可以为 MySQL 表使用非数字主键吗?

在我的 Web 应用程序中,用户可以定义文档并给它们一个唯一的名称来标识该文档,以及一个人类用来引用该文档的友好名称。以下面的表模式为例:

在此示例中,我使用id列作为主键,这是一个自动递增的数字。由于文档 ( name) 已经有一个自然 ID,我也可以这样做:

在本例中,name是文档的主键。我们已经消除了该id字段,因为它本质上只是 的副本,因为表格中的每个文档无论如何name都必须具有唯一性。name

这也意味着当我从外键关系中引用文档时,我必须调用它document_name而不是document_id.

这方面的最佳做法是什么?从理论上讲,我完全可以将 aVARCHAR用作主键,但它是否有任何缺点,例如性能开销?