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. ''
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 | 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 |
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.
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
Installez le package.
~$ pip install Flask-Migrate
~$ pip install Flask-SQLAlchemy
~$ pip install Flask
~$ pip install psycopg2
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
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
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'
})
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éez une instance de SQLAlchemy.
"""app/feedback/models/__init__.py
"""
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def init():
"""init
"""
db.create_all()
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
}
Voici un exemple de l'exécution de Homebrew
.
Vérifiez le service.
~$ brew services list
Name Status User Plist
postgresql started nsuhara /Users/nsuhara/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Démarrez le service.
~$ brew services start postgresql
Mettez fin au service.
~$ brew services stop postgresql
`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
```
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"
Déconnectez la base de données.
postgresql=# \q
Connectez-vous à la base de données.
Confirmez le rôle (utilisateur).
postgresql=# \du
List of roles
Role name | Attributes | Member of
----------+------------------------------------------------------------+-----------
nsuhara | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Créez un rôle (utilisateur).
postgresql=# CREATE ROLE "<role_name>" LOGIN PASSWORD "password";
postgresql=# CREATE ROLE "nsuhara" LOGIN PASSWORD "nsuhara";
Supprimez le rôle (utilisateur).
postgresql=# DROP ROLE "<role_name>";
postgresql=# DROP ROLE "nsuhara";
Connectez-vous à la base de données.
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
Créez une base de données.
postgresql=# CREATE DATABASE "<database_name>" OWNER "<role_ name>";
postgresql=# CREATE DATABASE "db.postgresql" OWNER "nsuhara";
Supprimez la base de données.
postgresql=# DROP DATABASE "<database_name>";
postgresql=# DROP DATABASE "db.postgresql";
Définissez les variables d'environnement Flask.
Migrez la base de données.
~$ flask db init
~$ flask db migrate
~$ flask db upgrade
Connectez-vous à la base de données.
Supprimez l'enregistrement.
postgresql=# delete from <table_name>;
Initialisez la numérotation automatique.
postgresql=# select setval ('<table_name>_id_seq', 1, false);
Recommended Posts