SQLAlchemy
认识
ORM:Object Relational Mapping(对象关系映射)将数据库中的表与类构建映射
- 简洁易读:将数据表抽象为对象(数据模型),更直观易读
- 可移植:封装了多种数据库引擎,面对多个数据库,操作基本一致,代码易维护
- 更安全:有效避免 SQL 注入
数据库与 python 对象的映射
- 数据库表 (table)映射为 Python 的类 (class),称为 model
- 表的字段 (field) 映射为 Column
- 表的记录 (record)以类的实例 (instance) 来表示
快速入门
FastAPI 的文件结构
.
└── sql_app
├── __init__.py
├── crud.py # 增删查改
├── database.py # 创建引擎
├── main.py
├── models.py # 声明映射
└── schemas.py # 建立 pydantic 模型
创建引擎
# database.py
from sqlalchemy import create_engine
# using MySQL
engine = create_engine('mysql+pymysql://user:pwd@localhost/testdb', pool_recycle=3600)
# using SQLite
engine = create_engine("sqlite:///testdb.db")
或者将数据库链接分离
# database.py
SQLALCHEMY_DATABASE_URL1 = "sqlite:///./sql_app.db"
SQLALCHEMY_DATABASE_URL2 = "postgresql://user:password@postgresserver/db"
engine = create_engine(
SQLALCHEMY_DATABASE_URL1, connect_args={"check_same_thread": False}
) # needed only for SQLite
建立对象
# database.py
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)