sqlalchemy 是怎么进行sql表结构管理的,怎么进行数据处理的

SQLAlchemy 的表结构管理数据处理(增删改查)


一、SQLAlchemy 表结构管理

SQLAlchemy 本质是一个 ORM(对象关系映射)框架,它把 Python 类与数据库表对应起来,从而用 Python 操作数据库。表结构的管理主要有两种方式:

1. Declarative Mapping(声明式定义)

最常用的方法,用类来描述表结构。

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_base

Base = 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, MetaData

metadata = 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 sessionmaker

Session = 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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值