ORM工具操作数据库流程
类似mybatis
ORM建表:




SQLAlchemy ORM 操作数据库六步走:
1. 建引擎(连哪个库)
from sqlalchemy import create_engine
engine = create_engine("sqlite:///test.db") # 也有 MySQL/PostgreSQL
2. 建会话工厂(怎么连)
from sqlalchemy.orm import sessionmaker
SessionLocal = sessionmaker(bind=engine)
3. 声明基类 + 定义模型(表长什么样)
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column()
4. 建表
Base.metadata.create_all(bind=engine)
5. 用会话做增删改查
# 增
user = User(name="小明")
db.add(user)
db.commit()
# 查
users = db.execute(select(User)).scalars().all()
# 改
user.name = "小红"
db.commit()
# 删
db.delete(user)
db.commit()
6. 在 FastAPI 路由里注入会话
@app.get("/users")
def get_users(db: Session = Depends(get_db)):
return db.execute(select(User)).scalars().all()
核心就一句:引擎管连接,会话管事务,模型管表结构,路由里注入会话干活。Java 那套 @Autowired + @Transactional 干的也是这几步,只是被 Spring 藏起来了。
SQLAlchemy ORM 五步走:
| 步骤 | 干什么 | 类比 Java |
|---|---|---|
| ① 建引擎 | 连哪个数据库 | application.yml |
| ② 会话工厂 | 生产带事务的会话对象 | SqlSessionFactory |
| ③ 定义模型 | 数据库列 ↔ Python 属性 | User.java 实体类 |
| ④ 建表 | 生成表(已有表跳过) | DDL 脚本 |
| ⑤ 依赖注入 | 路由里拿会话干活 | @Transactional |
① + ② + ⑤ 封装在 database.py,全项目写一次。③ 每个表写一个。日常开发只操心 ③ 和路由逻辑,其余复用就行。

浙公网安备 33010602011771号