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 TypeParent ClassPostgresql Type
IntegerArrayFieldIntegerFieldinteger[]
FloatArrayFieldFloatFielddouble precision[]
TextArrayFieldTextFieldtext[]
CharArrayFieldCharFieldcharacter varying[]
DateArrayFieldDateFielddate[]

自定义字段

要为基字段定义新的数组字段,请键入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

初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java出现编译错误,我不理解   java在gnu-trove库中是否有任何有序映射?   java Servlet应该有映射,但找不到Servlet   java时间和第二期显示1:10,而不是13:10   java Play Framework 1.2.7 Heroku更新崩溃   线程“main”java中的opencsv异常。lang.NoClassDefFoundError:org/apache/commons/lang3/ObjectUtils   selenium在java中隐藏警告消息   java使用ID引用将JSON实体反序列化为POJO   java无法在JRE 8中加载字体   一个线程中的异常/错误会使整个应用程序停止吗?   java访问重复子规则的元素标签;e、 g.用ANTLR解析(1,2,3)中的a   java如何从平移旋转中找到新坐标   使用HTML Java小程序托管jar文件存在安全问题   java如何按频率而不是字母顺序排列字符串数组   java清除bufferedReader和块以获得更多输入   java解密SAML2断言