gpt4 book ai didi

json - 如何在 Django 中使用 PostgreSQL 9.2 JSON 数据类型?

转载 作者:行者123 更新时间:2023-11-29 11:09:09 25 4
gpt4 key购买 nike

PostgreSQL 9.2 具有原生的 json 数据类型支持。我如何创建可以使用此数据类型作为模型字段之一的 Django 模型?

最佳答案

[注意。自问题发布以来发生了很多事情,所以我想也更新答案 - 现在包括新的 Django-postgresql 和 PostgreSQL 9.3 信息]

PostgreSQL 9.3

PostgreSQL 中的 JSON 支持(请参阅 doc 变得越来越有趣。现在可以搜索 JSON 字段,就好像它们是数据库列一样!这种支持仍然是基本的,无法与标准列运算符相提并论(见前),因此通过 Django ORM 使用它会很麻烦。

PostgreSQL 9.2

JSON数据类型为basically text在 pgSQL 9.2 中。添加的是 JSON 验证 - 很有用,但不会让人头疼。

**Django 和 PostgreSQL JSON

最近 Kickstarted backed development几个月前资助了 Django 中对 PostgreSQL 的高级支持。它将包括对 JSON 类型的高级支持,但可能仅在 9.4 中:

The Postgres team have recently merged support for a jsonb datatype - binary stored JSON. It is quite likely that I will delay JSON support until Postgres 9.4 is out and only support the jsonb data type. There are several reasons for this, the most significant being that the current json data type is severly limited in its implementation, lacking even an equality operator. This means that some parts of Django annotation code generate invalid queries (see this report) and also means that a __exact lookup has to be forbidden. To handle all these edge cases properly in Django would result in a huge amount of complexity, and the benefits you gain over just storing json in a text field are actually quite limited. 9.4 is due out towards the end of this year, so as a result JSON fields are likely to only feature in the 1.8 release.

来源:mjtamlyn blog

Psycopg 现在也原生支持 JSON field (以及 HSTORE)。

** Django 中的 DIY **

在 Django 中,创建您自己的使用特殊数据库类型的模型字段非常容易,请参阅 field db_type() .

请注意:

  1. 这只能在 pgSQL 下工作——您限制了代码的可移植性(尽管您可以有条件地在其他数据库上返回“文本”类型)
  2. 目前您将主要获得数据库端 json 验证
  3. 当然还有直接检索 JSON 对象的乐趣!

但要注意 Python 不支持 JSON,所以你并没有真正跳过 python 中的 json 转储/加载成本;您确实避免了字符串转换 - 但我没有检查内部结构或进行基准测试以查看是否存在任何真正的区别。

使用 PostgreSQL 9.3 和后续版本看起来事情可能会变得更有趣

您也可以从 django JSONField 开始并且已经获得了很多样板代码,只需覆盖 db_type 方法即可。

在我看来,听起来更有趣且值得锁定数据库(我喜欢 pgSql,无论如何!)的是 pgSQL 中使用 array_to_json and row_to_json 将数据重新调整为 JSON 结构的选项。 .不过,这需要对查询集进行更严重的更改,这听起来超出了您的问题范围。

关于json - 如何在 Django 中使用 PostgreSQL 9.2 JSON 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402630/

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