目录
[第二步:装 SQLAlchemy](#第二步:装 SQLAlchemy)
[1.创建库 + 表](#1.创建库 + 表)
参考资料:sqlaichemy介绍
一、SQLAlchemy介绍
SQLAlchemy是Python生态系统中最流行的ORM。
作用:让你不用写 SQL,用 Python 代码操作数据库
二、了解:数据库连接地址
一、数据库连接地址:URL通常可以包括用户名、密码、主机名、数据库名以及用于其他配置的可选关键字参数。主题格式为:
dialect+driver://username:password@host:port/database
三、了解:引擎
引擎:引擎是 SQLAlchemy 与数据库进行连接的核心组件。它负责管理数据库连接池,处理与数据库的实际通信。创建引擎时,需要指定数据库的类型和连接字符串。
链接mysql数据库的引擎创建方式:


第一步:装驱动(二选一)
使用驱动,首先需要安装对应的驱动
pip install mysqlclient
#或者
pip install pymysql
第二步:装 SQLAlchemy
pip install sqlalchemy
可直接用一行命令:
pip install pymysql sqlalchemy
注意:安装在虚拟环境里

原因:
-
版本冲突:不同项目需要依赖不同版本的库,比如 A 项目要用 SQLAlchemy 1.4,B 项目要用 2.0,全局安装会互相覆盖。
-
环境混乱:时间久了,全局环境里会堆积几百个你用不到的包,导致系统臃肿甚至崩溃。
四、了解:会话
会话:会话是我们与数据库进行交互的接口。通过会话,我们可以执行查询、插入、更新和删除等操作。一个会话可以管理多个数据库事务。创建会话通常使用 sessionmaker 来绑定到一个引擎上
# 1. 创建引擎(建立连接)
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/testdb")
# 2. 创建会话工厂(绑定引擎)
Session = sessionmaker(bind=engine)
# 3. 创建会话(真正用来操作)
db = Session()
五、了解:模型
模型(Model) :在 ORM 中,模型是表示数据库表的 Python 类。每个模型类的属性对应表中的列,并且可以定义关系来表示表与表之间的关联。sqlalchemy.ext.declarative.declarative_base() 创建的基类
六、实操
1.创建库 + 表
-- 创建数据库
CREATE DATABASE IF NOT EXISTS tree_hole DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE tree_hole;
-- 创建用户表
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
content TEXT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 创建树洞消息表
DROP TABLE IF EXISTS message;
CREATE TABLE message (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
content TEXT NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

2.示例代码
python
from sqlalchemy import create_engine,Column,Integer,String,Text,DateTime
from sqlalchemy.orm import sessionmaker,relationship
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
DB_URL="mysql+pymysql://root:0123456@localhost:3306/tree_hole"
#创建数据库引擎
engine=create_engine(
DB_URL,
echo=False,
pool_recycle=3600
)
#创建会话
SessionLocal=sessionmaker(autocommit=False,autoflush=False,bind=engine)
#创建唯一的基础父类(基类)
Base=declarative_base()
# 定义数据表
class User(Base):
_tablename_="user"
id=Column(Integer,primary_key=True,autoincrement=True)
username=Column(String(50),unique=True,nullable=False)
content=Column(Text,nullable=True)
create_time=Column(DateTime,default=datetime.now)
#如果表不存在,建表
# 获取会话
def get_db():
db=SessionLocal()
try:
yield db
finally:
db.close()
# CURD
if __name__ =="__main__":
# 获取数据库会话
db=next(get_db())
# 新增
new_user=User(
username="张三",
content="这是一条用户分享的提示词"
)
db.add(new_user)
db.commit()#提交
db.refresh(new_user)#刷新获取最新数据
print("新增成功:",new_user.id)
# 查询
user_list=db.query(User).all()
print("总条数",len(user_list))
# 条件查询
user_list=db.query(User).filter(User.username=="张三").all()
# 排序+分页
user_list=db.query(User).order_by(User.id.desc()).limit(10).offset(0).all()
# 修改
user_list=db.query(User).filter(User.id==1).first()
if user:
user.content="修改后的内容"
db.commit()
# 删除
user=db.query(User).filter(User.id==1).first()
if User:
db.delete(user)
db.commit()
#关闭会话
db.close
3.解析:
1.echo=False = 让控制台干净、不刷屏
2.pool_recycle=3600 = 防止连接超时报错
3.Base=declarative_base()
declarative_base()→ 生成模型父类Base→ 保存这个唯一父类- 所有表模型必须继承 Base,才能被 SQLAlchemy 识别


七、总结:
引擎:建立连接
engine = create_engine(数据库URL)
会话工厂:绑定引擎
Session = sessionmaker(bind=engine)
会话:真正操作数据库
db = Session()
增
db.add(obj)
查
db.query(Model).filter().first() / all() # 改 obj.field = xxx
删
db.delete(obj)
提交
db.commit()