跳转到主要内容

Django ORM 字段用于Postgres数组类型。

项目描述

Django模型字段用于存储值列表,使用PostgreSQL的ARRAY类型实现。

需求

  • PostgreSQL

  • psycopg2

  • Django >= 1.2

ARRAY数据库类型是PostgreSQL特有的,因此这些模型字段目前只能在PostgreSQL与psycopg2一起使用。如果在该字段使用其他数据库,将引发FieldError。

此包已在Django版本1.2至1.6之间进行了测试。

字段

在dbarray模块中定义的字段类型及其父类(来自django.db.models)和将创建的postgresql列的数据类型如下表所示。

每个字段接受与其父类相同的参数。

字段类型

父类

Postgresql类型

IntegerArrayField

IntegerField

integer[]

FloatArrayField

FloatField

double precision[]

TextArrayField

TextField

text[]

CharArrayField

CharField

character varying[]

DateArrayField

DateField

date[]

自定义字段

为了定义一个新的数组字段,需要有一个基础字段类型FooField

import dbarray

class FooArrayField(dbarray.ArrayFieldBase, FooField):
    __metaclass__ = dbarray.ArrayFieldMetaclass

这可能或可能不会工作,这取决于几个因素。例如,您可能需要重写db_type方法,以便它在生成的SQL中列类型的正确位置插入[]

当使用数组字段执行查找时,可能出现另一个问题,即PostgreSQL可能将查询参数作为与数据库列类型不兼容的数据类型获取(例如,text[]而不是varchar[])。然后您将收到如下错误

DatabaseError: operator does not exist: character varying[] = text[]
LINE 1: ... FROM "dbarray_chars" WHERE "dbarray_chars"."arr" = ARRAY['A...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

您可以通过在您的ArrayFieldBase子类上设置cast_lookups = True来解决此问题,这将指导它向SQL查询添加显式的类型转换。

查看源代码以获取如何处理新ArrayField类型问题的更多示例。

版本历史

版本 0.2

发布时间::

2013年10月17日

如果在使用除PostgreSQL以外的数据库时使用这些字段,将引发FieldError异常。(这是原始行为)

版本 0.1

发布时间::

2013年10月16日

添加了对查找和DateArrayField的测试和修复。

版本 0.0.1

发布时间::

2011年1月10日

首次发布

项目详情


下载文件

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

源代码分发

django-dbarray-0.2.tar.gz (5.4 kB 查看哈希)

上传时间: 源代码

支持