(2/4)Models 実装 「Flask Backend Startup」
...
app/models/user.py
- id: 自動生成
- emai: ❌重複禁止 ❗️必須入力
- password: ❗️必須入力
- created_at = ❗️必須入力
from datetime import datetime
from app.models import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True, nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
app/models/init.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from app.config import Config
db = SQLAlchemy()
def setup_db(app):
app.config.from_object(Config)
print(app.config['SQLALCHEMY_DATABASE_URI'])
db.init_app(app)
migrate = Migrate()
migrate.init_app(app, db)
# ⚠️ 循環 Importを避けるため 最後に記述
# ⬇️⬇️⬇️ ここにモデルを追加していく
from app.models.user import User
✅ 確認
A. 💻 ローカル ➡️ 🐳docker 🌏 web コンテナに🔑ログイン
docker-compose exec web bash
- Userテーブル作成マイグレーションコミット
bash
flask db migrate -m "Create user table."
- マイグレーション実行
bash
flask db upgrade
B. 💻 ローカル ➡️ 🐳 docker 🔵 dbコンテナに🔑ログイン
docker-compose exec db bash
- DB接続
psql -U postgres
- テーブルの確認
\dt
✅ 結果
Nameにusersが出力されていること
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+---------------
public | customers | table | USER_NAME
public | users | table | USER_NAME
- 👀DBのテーブル構造確認
\d users
✅ 結果
- model userと同じ構成になっているか確認
- 4つカラムが存在しているか✅ (id, email, password_hash, created_at)
Table "public.users"
Column | Type | Collation | Nullable | Default
---------------+-----------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
email | character varying(255) | | not null |
password_hash | character varying(255) | | not null |
created_at | timestamp without time zone | | |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
"users_email_key" UNIQUE CONSTRAINT, btree (email)