[PYTHON] Flask-Créer un service Web avec SQLAlchemy + PostgreSQL

Flask-Créer un service Web avec SQLAlchemy + PostgreSQL

introduction

Je vais l'introduire à l'aide d'un exemple d'application (Feedback).

`Ceci est un article sur l'environnement Mac, mais la procédure est la même pour l'environnement Windows. Veuillez lire et essayer la partie dépendant de l'environnement. ''

Objectif

Après avoir lu cet article jusqu'au bout, vous pourrez:

No. Aperçu mot-clé
1 Flask-Développement SQL Alchemy Flask-SQLAlchemy, psycopg2
2 Paramètres PostgreSQL psql, Flask-Migrate

Environnement d'exécution

environnement Ver.
macOS Catalina 10.15.2
Python 3.7.3
Flask-Migrate 2.5.2
Flask-SQLAlchemy 2.4.1
Flask 1.1.1
psycopg2 2.8.4
requests 2.22.0

Code source

Je pense que vous pouvez approfondir votre compréhension en suivant réellement le contenu de l'implémentation et le code source. Veuillez l'utiliser par tous les moyens.

GitHub

Articles Liés

0. Configuration de l'environnement de développement

tree.sh


/
├── app
│   ├── __init__.py
│   ├── config.py
│   ├── feedback
│   │   ├── __init__.py
│   │   ├── common/
│   │   ├── models
│   │   │   ├── __init__.py
│   │   │   └── feedback.py
│   │   ├── static/
│   │   ├── templates/
│   │   └── views/
│   ├── run.py
│   └── tests/
└── instance
     ├── postgresql.py
     ├── sqlite3.py
     └── config.py

1. Flask-Développement de SQL Alchemy

Installation du package

  1. Installez le package.

    ~$ pip install Flask-Migrate
    ~$ pip install Flask-SQLAlchemy
    ~$ pip install Flask
    ~$ pip install psycopg2
    
  2. Si vous obtenez une erreur lors de l'installation de psycopg2, spécifiez la variable d'environnement et exécutez la commande (environnement macOS + venv).

    ~$ xcode-select --install
    ~$ env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
    

Paramètres de SQL Alchemy

  1. Définissez la configuration de l'environnement de développement.

    """instance/config.py
    """
    
    from instance.postgresql import SQLALCHEMY_DATABASE_URI as DATABASE_URI
    
    DEBUG = True
    # SECRET_KEY is generated by os.urandom(24).
    SECRET_KEY = '\xf7\xf4\x9bb\xd7\xa8\xdb\xee\x9f\xe3\x98SR\xda\xb0@\xb7\x12\xa4uB\xda\xa3\x1b'
    STRIPE_API_KEY = ''
    
    SQLALCHEMY_DATABASE_URI = DATABASE_URI
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SQLALCHEMY_ECHO = True
    
  2. Configurez PostgreSQL.

    """instance/postgresql.py
    """
    
    SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://{user}:{password}@{host}/{name}'.format(**{
        'user': 'nsuhara',
        'password': 'nsuhara',
        'host': '127.0.0.1',
        'name': 'db.postgresql'
    })
    
  3. Configurez SQLite3 (bonus).

    """instance/sqlite3.py
    """
    
    import os
    
    SQLALCHEMY_DATABASE_URI = 'sqlite:///{host}/{name}'.format(**{
        'host': os.path.dirname(os.path.abspath(__file__)),
        'name': 'db.sqlite3'
    })
    

Créer un modèle

  1. Créez une instance de SQLAlchemy.

    """app/feedback/models/__init__.py
    """
    
    from flask_sqlalchemy import SQLAlchemy
    
    db = SQLAlchemy()
    
    
    def init():
        """init
        """
        db.create_all()
    
  2. Créez un modèle en héritant de la classe SQLAlchemy (db.Model).

    """app/feedback/models/feedback.py
    """
    
    from datetime import datetime
    
    from feedback.models import db
    
    
    class Feedback(db.Model):
        """Feedback
        """
        __tablename__ = 'feedback'
    
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        service = db.Column(db.String(255), nullable=False)
        title = db.Column(db.String(255), nullable=False)
        detail = db.Column(db.String(255), nullable=False)
        created_date = db.Column(
            db.DateTime, nullable=False, default=datetime.utcnow)
    
        def __init__(self, service, title, detail):
            self.service = service
            self.title = title
            self.detail = detail
    
        def to_dict(self):
            """to_dict
            """
            return {
                'id': self.id,
                'service': self.service,
                'title': self.title,
                'detail': self.detail,
                'created_date': self.created_date
            }
    

2. Paramètres PostgreSQL

Voici un exemple de l'exécution de Homebrew.

Confirmation de service

  1. Vérifiez le service.

    ~$ brew services list
    
    Name       Status  User    Plist
    postgresql started nsuhara /Users/nsuhara/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    

Début / fin du service

  1. Démarrez le service.

    ~$ brew services start postgresql
    
  2. Mettez fin au service.

    ~$ brew services stop postgresql
    

Vérifiez la base de données

  1. Vérifiez la base de données.

`Trois bases de données sont créées par défaut. En outre, le nom d'utilisateur Mac est défini comme propriétaire. ''

```procedure.sh
~$ psql -l
```

```result.sh
                            List of databases
    Name      |  Owner  | Encoding | Collate | Ctype |  Access privileges
--------------+---------+----------+---------+-------+---------------------
postgres      | nsuhara | UTF8     | C       | C     |
template0     | nsuhara | UTF8     | C       | C     | =c/nsuhara         +
              |         |          |         |       | nsuhara=CTc/nsuhara
template1     | nsuhara | UTF8     | C       | C     | =c/nsuhara         +
              |         |          |         |       | nsuhara=CTc/nsuhara
```

Connexion / déconnexion de la base de données

  1. Connectez-vous à la base de données.

    ~$ psql -h "<host_name>" -p <port_number> -U "<role_name>" -d "<database_name>"
    
    ~$ psql -h "127.0.0.1" -p 5432 -U "nsuhara" -d "postgres"
    
  2. Déconnectez la base de données.

    postgresql=# \q
    

Créer un rôle (utilisateur)

  1. Connectez-vous à la base de données.

  2. Confirmez le rôle (utilisateur).

    postgresql=# \du
    
                                    List of roles
    Role name |                         Attributes                         | Member of
    ----------+------------------------------------------------------------+-----------
    nsuhara   | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
    
  3. Créez un rôle (utilisateur).

    postgresql=# CREATE ROLE "<role_name>" LOGIN PASSWORD "password";
    
    postgresql=# CREATE ROLE "nsuhara" LOGIN PASSWORD "nsuhara";
    
  4. Supprimez le rôle (utilisateur).

    postgresql=# DROP ROLE "<role_name>";
    
    postgresql=# DROP ROLE "nsuhara";
    

Créer une base de données

  1. Connectez-vous à la base de données.

  2. Vérifiez la base de données.

    postgresql=# \l
    
                            List of databases
        Name      |  Owner  | Encoding | Collate | Ctype |  Access privileges
    --------------+---------+----------+---------+-------+---------------------
    db.postgresql | nsuhara | UTF8     | C       | C     |
    postgres      | nsuhara | UTF8     | C       | C     |
    template0     | nsuhara | UTF8     | C       | C     | =c/nsuhara         +
                  |         |          |         |       | nsuhara=CTc/nsuhara
    template1     | nsuhara | UTF8     | C       | C     | =c/nsuhara         +
                  |         |          |         |       | nsuhara=CTc/nsuhara
    
  3. Créez une base de données.

    postgresql=# CREATE DATABASE "<database_name>" OWNER "<role_ name>";
    
    postgresql=# CREATE DATABASE "db.postgresql" OWNER "nsuhara";
    
  4. Supprimez la base de données.

    postgresql=# DROP DATABASE "<database_name>";
    
    postgresql=# DROP DATABASE "db.postgresql";
    

Migration de base de données

  1. Définissez les variables d'environnement Flask.

  2. Migrez la base de données.

    ~$ flask db init
    ~$ flask db migrate
    ~$ flask db upgrade
    

Supprimer l'enregistrement

  1. Connectez-vous à la base de données.

  2. Supprimez l'enregistrement.

    postgresql=# delete from <table_name>;
    
  3. Initialisez la numérotation automatique.

    postgresql=# select setval ('<table_name>_id_seq', 1, false);
    

Recommended Posts

Flask-Créer un service Web avec SQLAlchemy + PostgreSQL
Lancer plusieurs instances dans Postgresql 11.x
[Python] Créer plusieurs répertoires
Flask-Créer un service Web avec SQLAlchemy + PostgreSQL
Créer un service Web avec Docker + Flask
Heppoko développe un service Web en une semaine # 2 Domain Search
Créer une fonction en Python
Créer un dictionnaire en Python
Créer un serveur Web en langage Go (net / http) (1)
Créer un lecteur CSV avec Flask
Créer un conteneur DI avec Python
Créer un fichier binaire en Python
Créer un service SlackBot sur Pepper
Créer une chaîne aléatoire en Python
Créer un bot LINE avec Django
[Python / Django] Créer une API Web qui répond au format JSON
Créez une application Web simple avec Flask
Créer une application Python-GUI dans Docker (PySimpleGUI)
[GPS] Créer un fichier kml avec Python
Lancez un simple service de recherche protégé par mot de passe en 5 minutes
Créez un environnement de test Vim + Python en 1 minute
Créer un fichier GIF en utilisant Pillow en Python
Créer un fichier qui peut être exécuté dans le langage de script
Je veux créer une fenêtre avec Python
Créer un graphique de distribution normale standard en Python
Comment créer un fichier JSON en Python
Créer un environnement virtuel avec conda avec Python
Créer une carte Web en utilisant Python et GDAL
Étapes pour développer une application Web en Python
Créer un modèle d'investissement dynamique simple en Python
Créer une nouvelle page en confluence avec Python
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Créer un package contenant des commandes globales en Python
Comment créer une API Rest dans Django
Jusqu'à ce que vous créiez une nouvelle application dans Django
Créez un fichier MIDI en Python en utilisant pretty_midi
Créer un modèle d'antenne cadre en Python dans KiCad
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Créer un bot de collecte de données en Python à l'aide de Selenium
Lancement d'un service Web pour noter les caractères manuscrits à l'aide de DeepLearning
Retour sur la création d'un service Web avec Django 1
[API LINE Messaging] Créez un menu riche avec Python
Créer un plugin pour exécuter Python Doctest sur Vim (2)
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Retour sur la création d'un service Web avec Django 2
Créez un faux serveur Minecraft en Python avec Quarry
Créer un planning Django
Créer Spatia Lite en Python
dict in dict Transforme un dict en dict
Créer un LV amorçable
Créer un environnement Python
Créer un bot slack
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
Créer une portée locale en Python sans polluer l'espace de noms
Création d'un livre de lecture lié à PostgreSQL avec Flask
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Créer un compte enfant de connect with Stripe en Python