sqlalchemy 是怎么进行sql表结构管理的,怎么进行数据处理的
:SQLAlchemy 的表结构管理 和 数据处理(增删改查)。
一、SQLAlchemy 表结构管理
SQLAlchemy 本质是一个 ORM(对象关系映射)框架,它把 Python 类与数据库表对应起来,从而用 Python 操作数据库。表结构的管理主要有两种方式:
1. Declarative Mapping(声明式定义)
最常用的方法,用类来描述表结构。
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_baseBase = declarative_base()class User(Base):__tablename__ = "users" # 表名id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(50))age = Column(Integer)# 创建数据库引擎
engine = create_engine("sqlite:///example.db")# 根据 Base 中的所有模型,生成对应的表
Base.metadata.create_all(engine)
这里:
Base.metadata.create_all(engine)
→ 自动创建表结构。- 如果表已存在,它不会覆盖,只会创建缺失的表。
2. Core Table 定义
用 Table
直接定义表,偏底层:
from sqlalchemy import Table, MetaDatametadata = MetaData()
user_table = Table("users", metadata,Column("id", Integer, primary_key=True),Column("name", String(50)),Column("age", Integer),
)metadata.create_all(engine)
3. 表结构迁移(Alembic)
SQLAlchemy 本身不负责 版本化迁移(比如修改表字段),这通常用 Alembic。
alembic revision --autogenerate -m "add age column"
alembic upgrade head
这样就能跟踪表结构变更,类似 Django 的 migration。
二、SQLAlchemy 数据处理
SQLAlchemy 的数据处理有两套 API:
1. ORM 风格(推荐,面向对象)
from sqlalchemy.orm import sessionmakerSession = sessionmaker(bind=engine)
session = Session()# 新增
user1 = User(name="Alice", age=25)
session.add(user1)
session.commit()# 查询
users = session.query(User).filter(User.age > 20).all()
for u in users:print(u.name, u.age)# 更新
user = session.query(User).filter_by(name="Alice").first()
user.age = 26
session.commit()# 删除
session.delete(user)
session.commit()
特点:
- 用对象操作,语法直观。
- 背后会生成 SQL 语句。
2. Core 风格(偏底层,SQL 表达式)
from sqlalchemy import insert, select, update, delete# 插入
stmt = insert(user_table).values(name="Bob", age=30)
engine.execute(stmt)# 查询
stmt = select(user_table).where(user_table.c.age > 20)
for row in engine.execute(stmt):print(row)# 更新
stmt = update(user_table).where(user_table.c.name == "Bob").values(age=31)
engine.execute(stmt)# 删除
stmt = delete(user_table).where(user_table.c.name == "Bob")
engine.execute(stmt)
特点:
- 类似直接写 SQL,但更安全(SQL 注入保护)。
- 更适合复杂 SQL、批量操作。
三、总结
-
表结构管理
Base.metadata.create_all(engine)
创建表结构。- 修改表结构 → 用 Alembic 管理迁移。
-
数据处理
- ORM 方式(类 + session) → 更面向对象,适合日常业务。
- Core 方式(Table + SQL 表达式) → 更底层,适合复杂 SQL。