Django的PostgreSQL本机数组字段扩展。
djorm-ext-pgarra的Python项目详细描述
Django的PostgreSQL数组字段。
简介
默认情况下,django有一个可能的类型的大集合,可以用来定义 模型。但有时我们需要使用postgresql提供的一些更复杂的类型。在这 case,我们将研究postgresql数组与django的集成。
快速启动
djorm ext pgarray公开一个简单的django模型字段djorm\pgarray.fields.arrayfield。 它接受另外两个参数:dbtype表示postgresql类型,以及 dimension表示数组字段的维度。
这是使用arrayfield的模型定义示例:
fromdjango.dbimportmodelsfromdjorm_pgarray.fieldsimportArrayFieldfromdjorm_expressions.modelsimportExpressionManagerclassRegister(models.Model):name=models.CharField(max_length=200)points=ArrayField(dbtype="int")objects=ExpressionManager()classRegister2(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 支持一种简单的扩展方法:
classRegister(models.Model):name=models.CharField(max_length=200)macs=ArrayField(dbtype="macaddr",type_cast=lambdax:str(x))# Same as previous line but uses str as callback directly# macs = ArrayField(dbtype="macaddr", type_cast=str)objects=ExpressionManager()如果ArrayField不是一个类型的人,那么他就忽略了一个建筑的存在。 对某个类型强制转换函数,并使用通过类型强制转换参数传递的函数。
如何安装?
您可以从github克隆repo并使用简单的python setup.py安装进行安装 命令。或者使用pip从python包索引安装它。
pip install djorm-ext-pgarray
此外,还可以安装djorm ext表达式,这有助于处理复杂的查询 使用数组字段。
已知问题
- 使用表达式包的查询集不能用作子查询。因为别名 传播无法正常工作。