D'une connaissance qui a lu l'article l'autre jour "Alors, si vous avez déjà une base de données en fonctionnement, pouvez-vous attacher Django plus tard?" Il y avait une demande égoïste, alors je l'ai également vérifiée.
Dès la conclusion, c'était possible. De plus, c'est facile. De toute évidence, il semble que les produits et versions de base de données pris en charge soient limités dans une certaine mesure. Cette zone sera utile.
J'utiliserai à nouveau l'application de l'article précédent, mais supprimerai la table côté base de données. Vous avez maintenant le code Django mais pas encore de base de données.
Bien que les paramètres soient écrits dans settings.py, le côté base de données n'est pas prêt. Si vous essayez de démarrer le serveur dans cet état, il ressemblera à ceci. Eh bien c'est vrai.
> python manage.py runserver
~Omission~
django.db.utils.OperationalError: FATAL: database "webshopping" does not exist
Préparez une base de données et une table appropriées pour qu'elle ressemble à une base de données existante.
> psql -U postgres -W
Mot de passe postgres de l'utilisateur:********
postgres=# CREATE DATABASE newshopping;
CREATE DATABASE
postgres=# \c newshopping;
newshopping=# CREATE TABLE items(
item_name TEXT PRIMARY KEY,
price INTEGER
);
CREATE TABLE
De plus, ajoutez les données appropriées.
postgres=# INSERT INTO items VALUES('Verre de fenêtre fragile', 50000);
INSERT 0 1
postgres=# INSERT INTO items VALUES('Verre de fenêtre difficile à casser', 99000);
INSERT 0 1
newshopping=# SELECT * FROM items;
item_name | price
--------------------+-------
Verre de fenêtre fragile| 50000
Verre de fenêtre difficile à casser| 99000
(2 lignes)
Les données semblent donc insérées fermement.
Si vous modifiez le produit de base de données, vous devez modifier settings.py. Reportez-vous à cette zone pour savoir comment écrire la partie MOTEUR. Pour postgresql, ce qui suit est OK. La partie NAME est le nom distinctif de la base de données. Je l'ai créé avec le nom newshopping plus tôt, je vais donc l'écrire exactement tel quel. Il n'y a rien de spécial sur les autres paramètres. Tout ce que vous avez à faire est d'écrire le nom d'utilisateur, le mot de passe et le nom d'hôte pour accéder.
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'newshopping',
'USER': 'your_db_username',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '',
}
}
L'utilisation détaillée est décrite dans l'URL de ici publiée au début, mais c'est la même que la base de données existante. Il existe un outil qui fera des ajustements pour vous. Comment commencer est comme ça.
> 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'
Si les paramètres settings.py réussissent, le code de la classe correspondant à Model sera renvoyé comme indiqué ci-dessus. Vous pouvez le coller dans votre Models.py ou l'écrire directement dans votre Models.py existant comme suit:
> python manage.py inspectdb >> models.Chemin vers py/models.py
Si vous le définissez sur ">", il sera écrasé, il est donc recommandé de le définir sur ">>". Après cela, il est préférable de commenter la description existante qui n'est plus nécessaire.
En regardant 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'
La définition de classe a été ajoutée avec succès!
Eh bien, j'ai fait une erreur en nommant la table. Le code a été transmis via la classe "Item", mais la classe Model générée automatiquement est "Items". Cela est dû au fait que le nom de la table dans la base de données est "items".
Mais c'est d'accord. Après tout, puisqu'il s'agit d'une définition de classe, il n'y a pas de problème même si vous modifiez ce nom de classe. Donc, j'ai un peu joué avec la partie définition de classe.
models.py
# ~Abréviation~
class Item(models.Model):
# ~Abréviation~
Maintenant, démarrons le serveur et vérifions le fonctionnement.
> python manage.py runserver
Il ne semble y avoir aucun problème!
Recommended Posts