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)
我們去啟動下看看,是否可以創建
我們運行後,可以看到我們的數據庫創建完畢了。
表結構和我們設計的是一樣的,這樣我們就完成了創建數據庫的操作,我們接下來就是看,如何去操作數據庫。
文章首發在公眾號,歡迎關注。