BOP - The Future of Creative Engineers -


← ホームに戻る

(2/4)Models 実装 「Flask Backend Startup」

...

app/models/user.py

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
  1. Userテーブル作成マイグレーションコミット

bash flask db migrate -m "Create user table."

  1. マイグレーション実行

bash flask db upgrade

B. 💻 ローカル ➡️ 🐳 docker 🔵 dbコンテナに🔑ログイン

docker-compose exec db bash
  1. DB接続
psql -U postgres
  1. テーブルの確認
\dt

✅ 結果

Nameにusersが出力されていること

                List of relations
Schema |   Name    | Type  |     Owner     
--------+-----------+-------+---------------
public | customers | table | USER_NAME
public | users     | table | USER_NAME
  1. 👀DBのテーブル構造確認
\d users

✅ 結果

                                          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)