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.
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.
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 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.
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': '',
}
}
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!
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~
Lassen Sie uns nun den Server starten und den Vorgang überprüfen.
> python manage.py runserver
Es scheint überhaupt kein Problem zu geben!
Recommended Posts