[PYTHON] So überprüfen Sie das Verhalten von ORM mit einer Datei mit django

So überprüfen Sie das Verhalten von ORM mit einer Datei mit django

Ich habe vorher Wie man mit einer Datei Hallo Welt macht geschrieben. Das, was Sie am meisten mit Django ausprobieren möchten, ist möglicherweise der ORM-Teil. So versuchen Sie den ORM-Teil mit nur einer Datei.

Es erfordert ein wenig Arbeit, es mit einer Datei zu versuchen, aber der jüngste Django hat es einigermaßen einfach gemacht.

Insbesondere sind die folgenden Arbeiten erforderlich.

Stellen Sie die Einstellungen auf der Python-Seite ein

Wenn keine Einstellungen vorhanden sind, tritt die folgende Ausnahme auf.

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Registrieren Sie gemäß der Fehlermeldung "DJANGO_SETTINGS_MODULE" als Umgebungsvariable oder rufen Sie "settings.configure ()" auf. Die minimal erforderlichen Einstellungen sind wie folgt.

from django.conf import settings

settings.configure(
    DEBUG=True,
    DATABASES={"default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": ":memory:"
    }},
    INSTALLED_APPS=[__name__]
)

DEBUG = True ist erforderlich, wenn das Abfrageergebnis von SQL ausgegeben wird. Es ist daher besser, es hinzuzufügen. Zusätzlich sind DB-Einstellungen erforderlich. Hier wird die speicherinterne Datenbank von SQLite angegeben. Wenn Sie in Bezug auf "INSTALLED_APPS" vergessen, es bei der Registrierung des später beschriebenen Modells anzugeben, funktioniert die Beziehung von "ManyToMany" nicht ordnungsgemäß.

Registrieren Sie das Modell in der Anwendungsregistrierung von django

Rufen Sie django.setup () auf. Dies ruft "populate ()" in "django.apps.registry.Apps" auf. Dabei wird das Modell in die Registrierung von Django eingetragen. Wenn dies nicht getan wird, tritt der folgende Fehler zum Zeitpunkt des Aufrufs von "Model.save ()" auf.

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

Setzen Sie als Einschränkung "app_label" auf das zu definierende Modell. Ohne dies kann die Modellklasse nicht generiert werden. Ich erhalte den folgenden Fehler.

IndexError: list index out of range

Gehen Sie beim Definieren wie folgt vor.

class X(models.Model):
    name = models.CharField(max_length=255, default="foo", blank=True)

    class Meta:
        app_label = __name__

Generieren Sie für jedes Modell eine Tabelle

Normalerweise wird eine DB-Tabelle durch "python manage.py migrate" usw. generiert. Es gibt keine Prozedur für eine Datei. Sie müssen über andere Wege nachdenken. Erstellen wir beispielsweise eine Funktion, die eine Tabelle erstellt.

from django.db import connections
from django.core.management.color import no_style


def create_table(model):
    connection = connections['default']
    cursor = connection.cursor()
    sql, references = connection.creation.sql_create_model(model, no_style())
    for statement in sql:
        cursor.execute(statement)

    for f in model._meta.many_to_many:
        create_table(f.rel.through)


#Es ist notwendig, eins nach dem anderen zu generieren
create_table(X)

Zusammenfassung

Das Obige kann wie folgt zusammengefasst werden. Mit dieser Funktion können Sie das Verhalten des Modells leicht überprüfen.

# -*- coding:utf-8 -*-
import django
from django.db import models
from django.conf import settings
from django.db import connections
from django.core.management.color import no_style


settings.configure(
    DEBUG=True,
    DATABASES={"default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": ":memory:"
    }},
    INSTALLED_APPS=[__name__]
)


def create_table(model):
    connection = connections['default']
    cursor = connection.cursor()
    sql, references = connection.creation.sql_create_model(model, no_style())
    for statement in sql:
        cursor.execute(statement)

    for f in model._meta.many_to_many:
        create_table(f.rel.through)


class X(models.Model):
    name = models.CharField(max_length=255, default="foo", blank=True)

    class Meta:
        app_label = __name__


if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.DEBUG)
    django.setup()
    create_table(X)

    xs = X.objects.bulk_create([X(id=1), X(id=2), X(id=3)])

    print(X.objects.count())

Recommended Posts

So überprüfen Sie das Verhalten von ORM mit einer Datei mit django
So führen Sie mit OpenCV ein Null-Padding in einer Zeile durch
So können Sie die Funktionen des Django Rest Frameworks in einer Datei ausprobieren
So legen Sie Google Text & Tabellen in einem Ordner zusammen in einer TXT-Datei mit Python ab
Verwendung von Laravel-ähnlichem ORM / Query Builder Orator mit Django
[Django] Wie man Eingabewerte im Voraus mit ModelForm angibt
So konvertieren Sie 0,5 in 1056964608 auf einmal
Wie man CSS in Django reflektiert
Wie fange ich mit Django an?
[Django] Lesen von Variablen / Konstanten, die in einer externen Datei definiert sind
Anzeigen von Legendenmarkierungen in einem mit Python 2D-Plot
So berechnen Sie "xx time" in einem Schuss mit Python timedelta
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
So löschen Sie abgelaufene Sitzungen in Django
So arbeiten Sie mit BigQuery in Python
So überprüfen Sie die Version von opencv mit Python
So führen Sie vom Server gesendete Ereignisse in Django durch
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
Umgang mit Speicherlecks in matplotlib.pyplot
Lesen einer CSV-Datei mit Python 2/3
[REAPER] Wie man Reascript mit Python spielt
So implementieren Sie Rails-Helfer-ähnliche Funktionen in Django
Speichern Sie mehrere Modelle in einem Formular mit Django
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie eine JSON-Datei in Python
[Python] Wie man Excel-Dateien mit Pandas liest
So reflektieren Sie ImageField in Django + Docker (Kissen)
Umgang mit Laufzeitfehlern in subprocess.call
So implementieren Sie "named_scope" von RubyOnRails mit Django
So überprüfen / extrahieren Sie Dateien im RPM-Paket
Wie man tkinter mit Python in Pyenv benutzt
So erstellen Sie eine Rest-API in Django
So lesen Sie Dateien in verschiedenen Verzeichnissen
Beispiel, um Python Kivy in eine Datei zu packen
Datei-Upload mit Django
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So erhalten Sie mehrere Modellobjekte zufällig in Django
So führen Sie eine Hash-Berechnung mit Salt in Python durch
So definieren Sie Decorator und Decomaker mit einer Funktion
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
Umgang mit Pyenv-Initialisierungsfehlern bei Fischen 3.1.0
So führen Sie Tests zusammen mit Python unittest aus
So laden Sie Dateien in Google Drive mit Google Colaboratory
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
Zugriff mit dem Cache beim Lesen von_json mit Pandas
Verwendung von Bootstrap in der generischen Klassenansicht von Django
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Verwendung der Template-Engine in einer Dateianwendung von Pyramid
Hochladen von Dateien in der generischen Klassenansicht von Django
[Arbeitseffizienz] So ändern Sie Dateinamen im Stapel mit Python
Wie man Decorator in Django benutzt und wie man es macht
So verweisen Sie auf statische Dateien in einem Django-Projekt
Vorgehensweise beim Ausführen von Transaktionen: In Anaconda fehlgeschlagen
Verwendung von Fixture in Django zur Eingabe von Beispieldaten für das Benutzermodell
So starten Sie in Atom geschriebenen Code mit einem Befehl, ohne teminal zu starten
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework