2010-11-18 6 views
2

Mögliche Duplizieren:
How to map PostgreSQL array field in Django ORMwie funktioniert django Modell nach dem Text [] in postgresql

ich einen Tisch Witz eine der Spalten von Datentyp Text [] in postgresql haben. Darf ich wissen, wie ich mit django models orm auf diese Spalte zugreifen kann? Mir ist bewusst, dass es ein kommasepariertes Ganzzahlfeld gibt, aber kein solches für textbezogene Felder. Benutze ich textfield oder muss dafür ein benutzerdefiniertes Feld erstellt werden?

+1

bitte näher erläutern. – Thomas

+0

@Thomas, meine Frage bearbeitet. – goh

+0

Sie meinen, Sie versuchen, ein Array von Strings in der DB zu speichern? Tu das nicht. Jede Zeichenfolge sollte in einer separaten Zeile sein. Möglicherweise müssen Sie eine separate Tabelle mit einer Viele-zu-Eins-Beziehung erstellen. – mpen

Antwort

2

Ich glaube nicht, Django ORM unterstützt PostgreSQL-Arrays. Es ist nicht überraschend, da dies wie eine ziemlich PostgreSQL-spezifische Funktion aussieht. Wenn Sie wirklich Arrays verwenden müssen, ist es am besten, SQL-Abfragen als Text von Hand zu erstellen. Andernfalls können Sie die Array-Spalten in Tabellen umwandeln, wie es Mark vorschlägt. das ist bei weitem eine tragbarere und konzeptionell saubere Lösung (obwohl die Leistung niedriger sein kann).

+0

Ich verwende die Spalte zu Speichern Sie tatsächlich tokenisierten Text. 1-1 mit meinem unverarbeiteten Text. Wenn ich 1 Token pro Zeile verwende, klingt das wie ein Overkill. – goh

+0

Datenbanken sind für große Datenmengen ausgelegt, also keine Sorge. Ich würde die Entscheidung wie folgt angehen: 1) gehe mit der Lösung, die einfacher zu implementieren ist, 2) wenn beide gleich einfach sind, gehe mit der Aufteilung des Arrays in Reihen, da es weniger unklar ist. –

+0

"Ich glaube nicht, dass Django ORM PostgreSQL-Arrays unterstützt": Das wird sich mit https://github.com/django/django/pull/2485 ändern – Medorator

1

Es gibt oft Zeiten, in denen das PostgreSQL-Array-Feld die richtige Lösung ist. Zum Beispiel, wenn Sie mit einer Legacy-Datenbank arbeiten. Das Projekt django-dbarray auf github unterstützt dies zusätzlich. Ich habe es nicht benutzt, aber es sieht so aus, als wäre die Benutzung im Grunde genommen:

from django.db import model 
import dbarray 

class Person(models.Model): 
    birthdate = models.DateField() 
    nicknames = dbarray.TextArrayField() 
Verwandte Themen