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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9acc45d315ac26d307fb79b75cec1d56cdff27d673a52606c17d6ab7ceb14123 |
|
MD5 | d6e1d31a89e7a01654b380e27cf68652 |
|
BLAKE2b-256 | 3f3d0cfd4b6a0e8611879fb3ba6825a9d5182dbd10e591a9dac06de51b41d67b |