跳转到主要内容

Django的PostgreSQL原生数组字段扩展。

项目描述

PostgreSQL数组字段用于Django。

简介

Django默认情况下,有一大系列可以用来定义模型的类型。但有时我们需要使用PostgreSQL提供的更复杂的类型。在这种情况下,我们将探讨PostgreSQL数组与Django的集成。

快速入门

djorm-ext-pgarray公开了一个简单的Django模型字段djorm_pgarray.fields.ArrayField。它接受两个额外的参数:dbtype表示PostgreSQL类型,以及dimension表示数组字段的维度。

这是使用ArrayField的模型示例定义

from django.db import models
from djorm_pgarray.fields import ArrayField
from djorm_expressions.models import ExpressionManager

class Register(models.Model):
    name = models.CharField(max_length=200)
    points = ArrayField(dbtype="int")
    objects = ExpressionManager()

class Register2(models.Model):
    name = models.CharField(max_length=200)
    texts = ArrayField(dbtype="text", dimension=2) # this creates `points text[][]` postgresql field.
    objects = ExpressionManager()

创建对象

这是创建具有数组字段的对象的示例示例。

>>> Register.objects.create(points = [1,2,3,4])
<Register: Register object>
>>> Register2.objects.create(texts = [['Hello', 'World'], ['Hola', 'Mundo']])
<Register2: Register2 object>

使用自定义PostgreSQL数据类型

有时我们需要使用PostgreSQL提供的其他数据类型来制作数组,而djorm-ext-pgarray不提供内置支持。现在,djorm-ext-pgarray支持一种简单的方式来扩展它

class Register(models.Model):
    name = models.CharField(max_length=200)
    macs = ArrayField(dbtype="macaddr", type_cast=lambda x: str(x))
    # Same as previous line but uses str as callback directly
    # macs = ArrayField(dbtype="macaddr", type_cast=str)
    objects = ExpressionManager()

如果type_cast参数不为None,ArrayField会忽略某些类型不存在内置转换函数的情况,并使用通过type_cast参数传递的函数。

如何安装它?

您可以从GitHub克隆仓库,并使用简单的python setup.py install命令进行安装。或者使用pip,从Python包索引中安装它。

pip install djorm-ext-pgarray

此外,您还可以安装djorm-ext-expressions,它可以帮助使用数组字段进行复杂查询。

已知问题

  • 使用表达式包的Querysets不能用作子查询。因为别名传播工作不正常。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

djorm-ext-pgarray-0.10.tar.gz (3.7 kB 查看哈希值)

上传时间

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面