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

最佳答案

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

PostgreSQL 9.3的

PostgreSQL中的JSON支持(请参阅doc变得越来越有趣。现在可以像搜索数据库字段一样搜索JSON字段了!这种支持仍然是基本的,与标准的列运算符(请参见前面)不相上下,因为这样,它将通过Django ORM可靠地使用。

PostgreSQL 9.2的

pgSQL 9.2中的JSON数据类型为basically text。所添加的是JSON验证-有用,但没有转向。

** Django和PostgreSQL JSON

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



资料来源:mjtamlyn blog

Psycopg 现在还本地支持JSON field(以及HSTORE)。

**在Django中进行D​​IY **

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

请注意:

  • 这仅在pgSQL下有效-您正在限制代码的可移植性(尽管您可以有条件地在其他数据库上返回“文本”类型)
  • 您目前通常只会获得数据库端json验证
  • ,当然还有直接检索JSON对象的乐趣!

  • 但请注意,Python不支持JSON的/ direct /,因此您并没有真正跳过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/

    10-11 06:28
    查看更多