[PYTHON] Es war zu einfach, eine vorhandene Datenbank mit Django zu verwenden

Zweck

Von einem Bekannten, der den Artikel neulich gelesen hat "Wenn Sie dann bereits eine Datenbank in Betrieb haben, können Sie Django später anhängen?" Es gab eine egoistische Anfrage, also habe ich sie auch überprüft.

Aus der Schlussfolgerung war es möglich. Außerdem ist es einfach. Offensichtlich scheinen die unterstützten Datenbankprodukte und -versionen in gewissem Maße eingeschränkt zu sein. Dieser Bereich ist hilfreich.

Weise

Ich werde die Anwendung aus dem vorherigen Artikel erneut verwenden, aber die Tabelle auf der Datenbankseite löschen. Jetzt haben Sie den Django-Code, aber noch keine Datenbank.

Bestätigung des Status quo

Obwohl die Einstellungen in settings.py geschrieben sind, ist die Datenbankseite nicht bereit. Wenn Sie versuchen, den Server in diesem Status zu starten, sieht er folgendermaßen aus. Nun, das stimmt.

> python manage.py runserver

~Unterlassung~
django.db.utils.OperationalError: FATAL:  database "webshopping" does not exist

Bereiten Sie die Datenbank vor

Bereiten Sie eine geeignete Datenbank und Tabelle vor, damit sie wie eine vorhandene Datenbank aussieht.

> psql -U postgres -W
Benutzer postgres Passwort:********

postgres=# CREATE DATABASE newshopping;
CREATE DATABASE

postgres=# \c newshopping;
newshopping=# CREATE TABLE items(
                item_name TEXT PRIMARY KEY,
                price INTEGER
              );
CREATE TABLE

Geben Sie außerdem die entsprechenden Daten ein.

postgres=# INSERT INTO items VALUES('Zerbrechliches Fensterglas', 50000);
INSERT 0 1
postgres=# INSERT INTO items VALUES('Schwer zu zerbrechendes Fensterglas', 99000);
INSERT 0 1

newshopping=# SELECT * FROM items;
     item_name      | price
--------------------+-------
Zerbrechliches Fensterglas| 50000
Schwer zu zerbrechendes Fensterglas| 99000

(2 Zeilen)

Die Daten scheinen also fest eingefügt zu sein.

Überprüfen Sie settings.py

Wenn Sie das Datenbankprodukt ändern, müssen Sie settings.py ändern. Informationen zum Schreiben des ENGINE-Teils finden Sie in diesem Bereich . Für postgresql ist Folgendes in Ordnung. Der NAME-Teil ist der definierte Name der Datenbank. Ich habe es früher mit dem Namen newshopping erstellt, also werde ich es genau so schreiben, wie es ist. Andere Parameter haben nichts Besonderes. Sie müssen lediglich den Benutzernamen, das Kennwort und den Hostnamen für den Zugriff eingeben.

settings.py


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'newshopping',
        'USER': 'your_db_username',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

Verknüpfung mit Django-Tools

Die detaillierte Verwendung wird in der URL von hier beschrieben, die zu Beginn veröffentlicht wurde, jedoch mit der vorhandenen Datenbank. Es gibt ein Tool, das Anpassungen für Sie vornimmt. Wie man anfängt ist so.

> python manage.py inspectdb

class Items(models.Model):
    item_name = models.TextField(primary_key=True)
    price = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'items'

Wenn die Einstellungen von settings.py erfolgreich sind, wird der Code der Klasse, die dem Modell entspricht, wie oben gezeigt zurückgegeben. Sie können dies wie folgt in Ihre Models.py einfügen oder direkt in Ihre vorhandene Models.py schreiben:

> python manage.py inspectdb >> models.Weg zum Py/models.py

Wenn Sie es auf ">" setzen, wird es überschrieben, daher wird empfohlen, es auf ">>" zu setzen. Danach ist es besser, die vorhandene Beschreibung zu kommentieren, die nicht mehr benötigt wird.

Mit Blick auf models.py ...

models.py


# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey has `on_delete` set to the desired behavior.
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models


class Items(models.Model):
    item_name = models.TextField(primary_key=True)
    price = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'items'

Die Klassendefinition wurde erfolgreich hinzugefügt!

Endgültige Anpassung mit vorhandenem Code

Nun, ich habe einen Fehler bei der Benennung der Tabelle gemacht. Der Code wurde durch die Klasse "Item" übergeben, die automatisch generierte Model-Klasse lautet jedoch "Items". Dies liegt daran, dass der Tabellenname in der Datenbank "Elemente" lautet.

Aber es ist okay. Da es sich um eine Klassendefinition handelt, gibt es kein Problem, selbst wenn Sie diesen Klassennamen ändern. Also habe ich ein wenig mit dem Klassendefinitionsteil gespielt.

models.py


# ~Abkürzung~
class Item(models.Model):
# ~Abkürzung~

Funktionsprüfung

Lassen Sie uns nun den Server starten und den Vorgang überprüfen.

> python manage.py runserver

Es scheint überhaupt kein Problem zu geben! image.png

Fazit

Recommended Posts

Es war zu einfach, eine vorhandene Datenbank mit Django zu verwenden
Durchsuchen Sie eine vorhandene externe Datenbank mit Django
[Einführung in Word Cloud] Einfache Verwendung mit Jetson-nano ♬
Verwenden Sie Gentelella mit Django
Einfach zu bedienende Flasche
Verwenden Sie WENIGER mit Django
Einfach zu bedienendes SQLite3
Verwenden Sie MySQL mit Django
Eine einfache Möglichkeit, ein Importmodul mit jupyter zu erstellen
Es ist zu mühsam, Japanisch in Vims Python3 anzuzeigen.
Stellen Sie eine vorhandene App mit Docker + Pyenv-Virtualenv + Uwsgi + Django bereit
Vorbereiten der Verwendung von Ansible auf einem vorhandenen Linux-Server
Erstellen einer Umgebung für die Verwendung von CaboCha mit Google Colaboratory
Es ist zu einfach, mit rauth auf die Twitter-API zuzugreifen, und ich habe sie ...
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Erstellen Sie eine API mit Django
Machen Sie es mit der Syntax einfach
Benennen Sie eine vorhandene Django-Anwendung um
Einfach zu bedienendes E-Cell 4 Intermediate
Verwenden Sie prefetch_related bequem mit Django
Ich möchte eine externe Bibliothek mit IBM Cloud-Funktionen verwenden
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
Bereiten Sie eine Umgebung für die Verwendung von OpenCV und Pillow mit AWS Lambda vor
Ich habe Jinja2 beim Lesen des Dokuments verglichen, um es mit Django zu verwenden
Schritte zur Entwicklung von Django mit VSCode
Python: So verwenden Sie Async mit
Verwenden der SQL-Datenbank von Azure mit SQL Alchemy
Laden Sie ein Django-Modul mit einem Interpreter
Django1.11.1 Bild-Uploader Leicht zu stolpernde Punkte
So verwenden Sie virtualenv mit PowerShell
Standardisieren Sie HTML, um mit Django gemietet zu werden
Einfach pyspark mit conda installieren
Wie fange ich mit Django an?
Einfach zu bedienende E-Cell 4 Advanced Edition
Einfach zu bedienendes Jupyter-Notebook (Python3.5)
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
Zeichnen Sie einfach Diagramme mit matplotlib
Hinweis: Senden Sie eine E-Mail mit Django
Verwenden Sie boto3, um zu S3 zu gelangen
[Python Tutorial] Eine einfache Einführung in Python
Verwenden Sie Unicode 6.0-Piktogramme mit Django / MySQL
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Schritt Notizen, um mit Django zu beginnen
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
[Django] Geben Sie ChoiceField einen Anfangswert
[Einführung in Python] Verwenden wir foreach mit Python
Wie man Ass / Alembic mit HtoA benutzt
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Verwendung von Japanisch mit NLTK-Plot
Verwendung des Jupyter-Notebooks mit ABCI
Erstellen Sie mit Django Updateview einen Update-Bildschirm
Verwenden Sie Ghost.py als Alternative zu PhantomJS