現在、fastapiとsqliteを用いて簡単な掲示板を練習で作成中です。
ドキュメント等を参考にしてファイル作成後、python3 database.py
でsqliteのファイルは作成できたのですが、中を見てもテーブルが作成されていません。
Base.metadata.create_all(bind=engine)
の記述でBaseクラスを継承しているテーブルが一括で作成されると思っていたのですが違うのでしょうか?
理解ができておらず、なぜテーブルが作成されないのかがわかっておりません。
わかる方いましたら教えていただきたいです。
以下、ディレクトリ構造と該当コードです。
keijiban(root)
├─models
│ ├─ message.py
│ └─ thread.py
├─database.py
├─keijiban.sqlite3
├─main.py
message.py
from datetime import datetime from sqlalchemy import Column, Integer, ForeignKey, String, DateTime from sqlalchemy.orm import relationship from database import Base class Message(Base): __tablename__ = "messages" id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) body = Column(String(255), nullable=False) thread_id = Column(Integer, ForeignKey("threads.id", ondelete='CASCADE'), nullable=False) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) thread = relationship('Thread', back_populates="messages")
thread.py
from datetime import datetime from sqlalchemy import Column, Integer, String, DateTime from sqlalchemy.orm import relationship from database import Base class Thread(Base): __tablename__ = "threads" id = Column(Integer, primary_key=True, nullable=False, autoincrement=True) name = Column(String(255), nullable=False) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) messages = relationship('Message', back_populates="thread", cascade='all, delete-orphan')
database.py
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker SQLALCHEMY_DATABASE_URL = 'sqlite:///./keijiban.sqlite3' engine = create_engine( SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} ) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() Base.metadata.create_all(bind=engine)
main.py
from fastapi import FastAPI from database import SessionLocal app = FastAPI() def get_db(): db = SessionLocal() try: yield db finally: db.close()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/10 07:41