【问题标题】:How to map PostgreSQL array field in Django ORM如何在 Django ORM 中映射 PostgreSQL 数组字段
【发布时间】:2011-05-22 23:51:34
【问题描述】:

我的 PostrgreSQL 数据库中有一个文本类型的 array 字段。有没有办法将它映射到 Django 模型中?

【问题讨论】:

标签: django postgresql django-models django-orm


【解决方案1】:

您可能想查看 github 上的 django-dbarray。它增加了对 postgresql 数组字段的支持。

我之前没用过,但是看起来你只需要这样做:

from django.db import model
import dbarray

class ProfilingTestRun(models.Model):
    function = models.CharField(max_length=64)
    runtimes = dbarray.FloatArrayField()

【讨论】:

【解决方案2】:

另一个不错的选项之一是http://django-orm.readthedocs.org/ --- 一个为许多本地 postgres 类型添加绑定的库。

django-orm 的主要缺点是截至今天它还没有对south 的工作支持。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 现在这似乎是比 django-dbarray 更好的选择,因为它维护得更好。 dbarray 不适用于当前形式的 CharField 数组(尽管有一个未完成的拉取请求显然可以解决此问题)
    【解决方案4】:

    Django 即将提供对 PostgreSQL 特定模型字段的原生支持(在 django.contrib.postgres.fields 模块中):

    【讨论】:

      【解决方案5】:

      由于Django 1.8 有一个django.contrib.postgress module 增加了对array fields 以及其他PostgreSQL 数据类型的支持。

      例如,您可以这样做:

      from django.contrib.postgres.fields import ArrayField
      from django.db import models
      
      class GoGame(models.Model):
          board = ArrayField(ArrayField(models.IntegerField(),size=19),size=19)
      

      【讨论】:

        【解决方案6】:

        你必须继承 model.Field 并编写输入和输出方法。

        http://docs.djangoproject.com/en/dev/howto/custom-model-fields/#custom-database-types

        【讨论】:

          猜你喜欢
          • 2021-01-17
          • 2017-10-02
          • 1970-01-01
          • 2023-03-16
          • 2010-12-11
          • 1970-01-01
          • 2016-07-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多