Postgres数组类型的django orm字段。
django-dbarra的Python项目详细描述
存储值列表的django模型字段,使用postgresqlARRAY类型实现。
要求
- PostgreSQL
- 心理2
- django>;=1.2
数组db类型是postgresql特定的,因此这些模型字段当前 只能使用psycopg2处理postgresql。如果 字段与另一个数据库一起使用。
这个包已经用django 1.2到1.6版本(包括1.2到1.6)进行了测试。
字段
在dbarray模块中定义的字段类型列在下表中, 以及每个字段的父类(来自django.db.models)和数据 它将创建的PostgreSQL列的类型。
每个字段都采用与其父类相同的参数。
Field Type | Parent Class | Postgresql Type |
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可以将查询参数作为数据类型 与db列的类型不兼容(例如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子类,它指示它添加显式类型转换 到SQL查询。
在源代码中查看更多关于如何处理新的 阵列字段类型。
版本历史记录
版本0.2
Released: | October 17, 2013 |
---|
如果在除 PostgreSQL。(这是最初的行为)
版本0.1
Released: | October 16, 2013 |
---|
为查找和DateArrayField添加了测试和修复程序。
版本0.0.1
Released: | January 10, 2011 |
---|
初始版本