Installieren der Hstore-Erweiterung in Django-Nasentests

7

Ich habe die hstore-Erweiterung erfolgreich installiert, und alles funktioniert, wenn ich syncdb . (Ich verwende djorm-ext-hstore )

nose erstellt jedoch eine neue temporäre Datenbank, in der Tests ausgeführt werden, und hstore ist nicht darin installiert.

Ich muss CREATE EXTENSION HSTORE; auf der Test-DB ausführen, kurz bevor nose die db synchronisiert, aber ich kann keine Informationen darüber finden, wie das geht.

Irgendwelche Ideen?

    
0atman 03.05.2013, 09:39
quelle

5 Antworten

24

Dies ist kein Problem: Der beste Weg, dies zu beheben, ist, die Erweiterung hstore in der Standarddatenbank template1

anzuwenden

psql -d template1 -c 'create extension hstore;'

Referenz: Erstellen eine neue Datenbank mit der Hstore-Erweiterung bereits installiert?

    
0atman 03.05.2013 23:32
quelle
5

Mit Django 1.8:

%Vor%

Ссылка

BEARBEITEN: Beachten Sie, dass es auch ein JSONField gibt, das behandelt (un) Marshalling von json bereits und Inline-Suche. Die HStoreExtension ist dafür nicht notwendig. Benötigt Django & gt; = 1.11 und Postgres & gt; = 9.4.

    
Risadinha 02.09.2015 16:45
quelle
4

Sie können auch den Befehl sql in einer Migration ausführen (Django 1.8):

%Vor%     
radeklos 05.06.2015 13:15
quelle
3

Ich gehe davon aus, dass Sie Django-Nase verwenden. In diesem Fall sollten Sie Ihre eigene TestSuiteRunner erstellen:

%Vor%

Dann sollten Sie in settings.py Ihren eigenen Test-Runner angeben:

%Vor%     
Denis Malinovsky 03.05.2013 10:25
quelle
2

Seit meiner letzten Antwort verwarf Django und entfernte pre_syncdb signal. Ich habe die Antwort aktualisiert, um neuere Versionen zu berücksichtigen. Die grundlegenden Mechanismen sind für neuere Versionen identisch, da beide Methoden auf Signale und den SQL-Code angewiesen sind, der nur ausgeführt wird, wenn die HSTORE-Erweiterung nicht existiert.

Django 1.8 +

Seit Django DB-Migrationen eingeführt hat, waren pre_syncdb signals < em> markiert veraltet in 1.7 und vollständig entfernt in 1.9 Sie führten jedoch ein neues Signal namens pre_migrate ein, das gleich verwendet werden kann Weg.

%Vor%

Django 1.6+ (ursprüngliche Antwort)

Mein Vorschlag ist, pre_syncdb signal hook zu verwenden.

Siehe meine Antwort auf der anderen Frage .

%Vor%

Das Signal pre_syncdb wird ausgelöst, bevor die Modelltabelle erstellt wird. Dies ist ideal, um sicherzustellen, dass die Erweiterung installiert wird, wenn die Testdatenbank jedes Mal eingerichtet wird. Das IF NOT EXISTS stellt sicher, dass PostgreSQL den Befehl ignoriert, wenn die Erweiterung bereits installiert ist. Sie erhalten einen Fehler, wenn Sie CREATE EXTENSION für eine Erweiterung ausführen, die bereits existiert.

Dies funktioniert für das Standard-Django-Unit-Test-Framework und wird höchstwahrscheinlich für Django-Nasentests funktionieren.

Weitere Informationen zu Signalen: Ссылка

    
stackunderflow 13.05.2014 08:16
quelle