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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d96a7f6c099c61f5bda0eafaafb74788b5181d9ccd87b18ed8c537305e25121 |
|
MD5 | 65a5ebaa1b7af9fedb8da894941666f1 |
|
BLAKE2b-256 | 683294631f655284c8c0436aef9a269c28a169bbbef8526e707814d3afb9666a |