ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

pymysql 基础操作 SQLAlchemy ORM 框架

2026/8/25 12:35:39 拓冰建站 浏览量
pymysql 基础操作 SQLAlchemy ORM 框架 pymysql 是 Python 用来连接并操作 MySQL 数据库的第三方驱动库。pymysql安装pip install pymysql执行流程连接数据库 → 创建游标 → 执行 SQL → 提交 / 回滚 → 关闭资源增删改查示例# 导入 pymysql 模块用于 Python 连接和操作 MySQL 数据库 import pymysql # 创建数据库连接对象 # connect() 方法用于建立与 MySQL 服务器的连接 conn pymysql.connect( hostlocalhost, # 数据库服务器地址localhost 表示本机 port3306, # MySQL 服务端口号默认是 3306 userroot, # 登录数据库的用户名 passwordroot, # 对应用户的密码 databasedb2604 # 要操作的具体数据库名称 ) # 创建游标对象 # 游标用于执行 SQL 语句并获取执行结果 cur conn.cursor() # 使用游标执行 SQL 语句 # execute() 方法用于执行一条 SQL # %s 是 pymysql 的参数占位符防止 SQL 注入 # 第二个参数是一个元组按顺序替换 SQL 中的 %s cur.execute( INSERT INTO users(name, age, gender) VALUES(%s, %s, %s), (zhaosi, 23, 男) ) # 提交事务 # 对于 INSERT / UPDATE / DELETE 操作必须调用 commit() # 否则数据不会真正写入数据库会在连接关闭后自动回滚 conn.commit() # 关闭游标对象 # 释放游标占用的资源 cur.close()SQLAlchemy安装pip install sqlalchemy pymysql创建模型# 从 SQLAlchemy 中导入创建数据库引擎的工具 from sqlalchemy import create_engine, Integer, String, DateTime # 从 SQLAlchemy ORM 模块中导入声明式基类、映射类型和字段映射工具 from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column # 导入 Python 标准库中的 datetime用于日期时间字段的默认值 from datetime import datetime # 创建数据库引擎用于连接 MySQL 数据库 engine create_engine( # 数据库连接字符串指定数据库类型、驱动、账号、密码、地址、库名和编码 mysqlpymysql://root:rootlocalhost:3306/db2604?charsetutf8mb4, # 是否打印执行的 SQL 语句True 表示开启调试非常有用 echoTrue ) # 定义 ORM 模型的基类所有数据表模型都需要继承该类 class Base(DeclarativeBase): # 当前类仅作为父类使用不需要额外逻辑 pass # 定义员工表对应的 ORM 模型类继承自 Base class Emp(Base): # 指定该模型类对应的数据库表名 __tablename__ emp # 定义主键字段 id # Mapped[int]Python 中的类型注解表示 id 是 int 类型 # mapped_column定义数据库字段 # Integer数据库字段类型为 INT # primary_keyTrue设置为主键 # autoincrementTrue主键自增 id: Mapped[int] mapped_column(Integer, primary_keyTrue, autoincrementTrue) # 定义姓名字段 name # String(32)数据库字段类型为 VARCHAR(32) # nullableFalse非空约束该字段不能为空 name: Mapped[str] mapped_column(String(32), nullableFalse) # 定义年龄字段 age # Integer数据库字段类型为 INT # 未设置 nullable默认允许为 NULL age: Mapped[int] mapped_column(Integer) # 定义出生日期字段 birth # DateTime数据库字段类型为 DATETIME # defaultdatetime.now插入数据时默认使用当前时间 birth: Mapped[datetime] mapped_column(DateTime, defaultdatetime.now) # 根据所有继承 Base 的模型类在数据库中创建对应的表 # bindengine指定使用哪个数据库引擎 Base.metadata.create_all(bindengine)