Ich werde es anhand einer Beispielanwendung (Feedback) vorstellen.
`Dies ist ein Artikel über die Mac-Umgebung, aber die Vorgehensweise ist für die Windows-Umgebung dieselbe. Bitte lesen und probieren Sie den umweltabhängigen Teil. ``
Nachdem Sie diesen Artikel bis zum Ende gelesen haben, können Sie:
No. | Überblick | Stichwort |
---|---|---|
1 | Flask-SQL Alchemy-Entwicklung | Flask-SQLAlchemy, psycopg2 |
2 | PostgreSQL-Einstellungen | psql, Flask-Migrate |
Umgebung | 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 |
Ich denke, dass Sie Ihr Verständnis vertiefen können, indem Sie den Implementierungsinhalten und dem Quellcode tatsächlich folgen. Bitte benutzen Sie es auf jeden Fall.
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
Installieren Sie das Paket.
~$ pip install Flask-Migrate
~$ pip install Flask-SQLAlchemy
~$ pip install Flask
~$ pip install psycopg2
Wenn bei der Installation von psycopg2
eine Fehlermeldung angezeigt wird, geben Sie die Umgebungsvariable an und führen Sie den Befehl aus (macOS + venv-Umgebung).
~$ xcode-select --install
~$ env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
Legen Sie die Konfiguration der Entwicklungsumgebung fest.
"""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
Richten Sie PostgreSQL ein.
"""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'
})
Richten Sie SQLite3 (Bonus) ein.
"""instance/sqlite3.py
"""
import os
SQLALCHEMY_DATABASE_URI = 'sqlite:///{host}/{name}'.format(**{
'host': os.path.dirname(os.path.abspath(__file__)),
'name': 'db.sqlite3'
})
Erstellen Sie eine Instanz von SQLAlchemy.
"""app/feedback/models/__init__.py
"""
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def init():
"""init
"""
db.create_all()
Erstellen Sie ein Modell, indem Sie die SQLAlchemy-Klasse (db.Model
) erben.
"""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
}
Dies ist ein Beispiel für die Ausführung von "Homebrew".
Überprüfen Sie den Service.
~$ brew services list
Name Status User Plist
postgresql started nsuhara /Users/nsuhara/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Starten Sie den Dienst.
~$ brew services start postgresql
Beenden Sie den Dienst.
~$ brew services stop postgresql
`Standardmäßig werden drei Datenbanken erstellt. Außerdem wird der Mac-Benutzername als Eigentümer festgelegt. ``
```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
```
Stellen Sie eine Verbindung zur Datenbank her.
~$ 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"
Trennen Sie die Datenbank.
postgresql=# \q
Stellen Sie eine Verbindung zur Datenbank her.
Bestätigen Sie die Rolle (Benutzer).
postgresql=# \du
List of roles
Role name | Attributes | Member of
----------+------------------------------------------------------------+-----------
nsuhara | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Erstellen Sie eine Rolle (Benutzer).
postgresql=# CREATE ROLE "<role_name>" LOGIN PASSWORD "password";
postgresql=# CREATE ROLE "nsuhara" LOGIN PASSWORD "nsuhara";
Löschen Sie die Rolle (Benutzer).
postgresql=# DROP ROLE "<role_name>";
postgresql=# DROP ROLE "nsuhara";
Stellen Sie eine Verbindung zur Datenbank her.
Überprüfen Sie die Datenbank.
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
Erstellen Sie eine Datenbank.
postgresql=# CREATE DATABASE "<database_name>" OWNER "<role_ name>";
postgresql=# CREATE DATABASE "db.postgresql" OWNER "nsuhara";
Löschen Sie die Datenbank.
postgresql=# DROP DATABASE "<database_name>";
postgresql=# DROP DATABASE "db.postgresql";
Legen Sie die Umgebungsvariablen für den Kolben fest.
Migrieren Sie die Datenbank.
~$ flask db init
~$ flask db migrate
~$ flask db upgrade
Stellen Sie eine Verbindung zur Datenbank her.
Löschen Sie den Datensatz.
postgresql=# delete from <table_name>;
Initialisieren Sie die automatische Nummerierung.
postgresql=# select setval ('<table_name>_id_seq', 1, false);
Recommended Posts