­

FastAPI 學習之路(三十二)創建數據庫

在大型的web開發中,我們肯定會用到數據庫操作,那麼FastAPI也支持數據庫的開發,你可以用 PostgreSQL MySQL SQLite Oracle 等

 

本文用SQLite為例。我們看下在fastapi是如何操作設計數據庫的

#這個安裝依賴也可以
pip install sqlalchemy
#我在看到有支持異步的,我用的這個,但是這個沒有上面的成熟
pip install fastapi-async-sqlalchemy

我們看下如何在項目中使用

SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db" #固定格式
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
#connect_args 這個只有sqlite才用
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
#SessionLocal 類的每個實例都是一個數據庫會話。 該類本身還不是數據庫會話。
# 但是一旦我們創建了 SessionLocal 類的實例,這個實例將是實際的數據庫會話。
Base = declarative_base()

我們用Base作為基礎的,通過繼承來創建每個數據庫模型或類。我們看下

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)
    is_active = Column(Boolean, default=True)
    items = relationship("Item", back_populates="owner")

class Item(Base):
    __tablename__ = "items"
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, index=True)
    description = Column(String, index=True)
    owner_id = Column(Integer, ForeignKey("users.id"))
    owner = relationship("User", back_populates="items")

   我們去創建了兩個類,一個人,一個每一項,然後有對應的關聯關係,這個表格怎麼同步到數據庫呢,其實很簡單。

        

Base.metadata.create_all(bind=engine)

 我們去啟動下看看,是否可以創建

 

 我們運行後,可以看到我們的數據庫創建完畢了。

 

 

 表結構和我們設計的是一樣的,這樣我們就完成了創建數據庫的操作,我們接下來就是看,如何去操作數據庫。

文章首發在公眾號,歡迎關注。