[PYTHON] C'était trop facile d'utiliser une base de données existante avec Django

Objectif

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.

manière

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.

Confirmation du statu quo

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 la base de données

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.

Vérifiez settings.py

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': '',
    }
}

Lien à l'aide des outils django

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!

Réglage final avec le code existant

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~

Contrôle de fonctionnement

Maintenant, démarrons le serveur et vérifions le fonctionnement.

> python manage.py runserver

Il ne semble y avoir aucun problème! image.png

Conclusion

Recommended Posts

C'était trop facile d'utiliser une base de données existante avec Django
Parcourir une base de données externe existante avec Django
[Introduction à WordCloud] Il est facile à utiliser même avec Jetson-nano ♬
Utiliser Gentelella avec Django
Flacon facile à utiliser
Utilisez LESS avec Django
Facile à utiliser SQLite3
Utiliser MySQL avec Django
Un moyen simple de créer un module d'importation avec jupyter
Il est trop difficile d'afficher le japonais avec le python3 de Vim.
Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django
Préparation à l'utilisation d'Ansible sur un serveur Linux existant
Créer un environnement pour utiliser CaboCha avec Google Colaboratory
C'est trop facile d'accéder à l'API Twitter avec rauth et je l'ai ...
API Nifty Cloud facile à utiliser avec botocore et python
Créer une API avec Django
Rendre avec la syntaxe facile
Renommer une application Django existante
E-Cell 4 Intermédiaire facile à utiliser
Utilisez prefetch_related commodément avec Django
Je souhaite utiliser une bibliothèque externe avec IBM Cloud Functions
[Python] Explique comment utiliser la fonction format avec un exemple
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper
Préparer un environnement pour utiliser OpenCV et Pillow avec AWS Lambda
J'ai comparé Jinja2 en lisant le document pour l'utiliser avec Django
Étapes pour développer Django avec VSCode
Python: comment utiliser async avec
Utilisation de la base de données SQL d'Azure avec SQL Alchemy
Charger les modules Django avec un interpréteur
Django 1.11.1 Téléchargeur d'images Points faciles à trébucher
Pour utiliser virtualenv avec PowerShell
Standardiser le HTML à louer avec Django
Installez facilement pyspark avec conda
Comment démarrer avec Django
E-Cell 4 Advanced Edition facile à utiliser
Bloc-notes Jupyter facile à utiliser (Python3.5)
[Django] Utiliser MessagePack avec le framework Django REST
Dessinez facilement des graphiques avec matplotlib
Remarque: envoyer un e-mail avec Django
Utilisez boto3 pour accéder à S3
[Tutoriel Python] Une introduction facile à Python
Utiliser les pictogrammes Unicode 6.0 avec django / MySQL
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
Comment effectuer un traitement arithmétique avec le modèle Django
Notes d'étape pour démarrer avec django
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
[Django] Donner une valeur initiale à ChoiceField
[Introduction à Python] Utilisons foreach avec Python
Comment utiliser Ass / Alembic avec HtoA
Un moyen simple d'utiliser Wikipedia avec Python
Comment utiliser le japonais avec le tracé NLTK
Comment utiliser le notebook Jupyter avec ABCI
Créer un écran de mise à jour avec Django Updateview
Utilisez Ghost.py comme alternative à PhantomJS