当前位置: 首页 > news >正文

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。

http://www.lryc.cn/news/626688.html

相关文章:

  • 深度学习核心技巧
  • SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
  • Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发送重平衡(reblanace)
  • Mybatis执行SQL流程(五)之MapperProxy与MapperMethod
  • 在完全没有无线网络(Wi-Fi)和移动网络(蜂窝数据)的环境下,使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本2)
  • 力扣 hot100 Day79
  • 大数据常见问题分析与解决方案
  • ODPS 十五周年实录 | 为 AI 而生的数据平台
  • Flask高效数据库操作指南
  • 面向AI应用的新一代迷你电脑架构解析 ——Qotom Q51251AI
  • 【39页PPT】大模型DeepSeek在运维场景中的应用(附下载方式)
  • imx6ull-驱动开发篇31——Linux异步通知
  • Jumpserver堡垒机使用VNC录入Linux图形界面资产
  • 十大经典 Java 算法解析与应用
  • 机器学习--数据清洗—(续篇)
  • (nice!!!)(LeetCode 每日一题) 1277. 统计全为 1 的正方形子矩阵 (动态规划)
  • C++ MFC/BCG编程:文件对话框(CFileDialog、CFolderPickerDialog)
  • 力扣48:旋转矩阵
  • 数据结构之排序大全(1)
  • 2.Shell脚本修炼手册之---创建第一个 Shell 脚本
  • 大模型入门实战 | 单卡 3090 十分钟完成 Qwen2.5-7B 首次微调
  • 电脑驱动免费更新? 这款驱动管理工具:一键扫更新,还能备份恢复,小白也会用~
  • c语言多任务处理(并发程序设计)
  • iOS App 混淆工具实战 医疗健康类 App 的安全与合规保护
  • Elasticsearch 写入全链路:从单机到集群
  • [系统架构设计师]面向服务架构设计理论与实践(十五)
  • [element-plus] el-tree 拖拽到其他地方,不拖拽到树上
  • Vue3 element ui 给表格的列设置背景颜色
  • 晨控EtherCAT设备分配IP操作手册
  • LWIP的TCP协议