Skip to content
On this page

與資料庫對話(SQLite)篇

想和資料表或與資料庫對話最基本要有2個步驟:

  • 第1個是建立sqlachemy模組讓它與資料庫連線
  • 第2個則是建立資料表,看是要寫入,還是讀取原本資料庫內的資料表。

環境安裝

  • Sqlalchemy
cmd
pip install sqlalchemy

與資料庫連線 ( database.py )

引入sqlalchemy模組

py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

設定資料庫模組,官方使用Sqlite資料庫,連結無誤後會在本機端產生sql_app.db的sqlite資料庫檔案,可使用官方指定的 DB Browser for SQLite 瀏覽器來觀看內容。

py
DATABASE_URL = "sqlite:///./sql_app.db"

engine = create_engine(
    DATABASE_URL, connect_args={"check_same_thread": False}
)

TIP

connect_args={"check_same_thread": False}這行僅適用在sqlite。

通常sqlite、postgresql不需要額外再安裝其他連接模組。

DATABASE_URL = "postgresql://user:password@postgresserver/db"

使用Sqlalchemy與資料庫對話(orm)

py
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

提供其他模組使用

py
Base = declarative_base()

完整碼:

py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./sql_app.db"
engine = create_engine(
    DATABASE_URL, connect_args={"check_same_thread": False}
)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

建立資料表 ( models.py )

引入sqlalchemy模組,針對資料表的欄位與類型

py
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship

引入資料庫連線模組 database.py內的 Base

py
from database import Base

接下來則是建立表單類別

py
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")

TIP

User 與 Item 兩張表單各有一個互像依賴的欄位 ( items、owner ),留意是使用 relationship 來宣告。

執行後的結果

如果依據上述2個步驟建立,就可以呈現出以下的畫面。

create sqlite db

TIP

畫面是由 DB Browser for SQLite 所呈現。


參考