SQLAlchemy是Python生态中非常成熟的ORM框架,它可以将数据库表映射为Python类,把表中的行映射为类的实例,让开发者不需要直接编写SQL语句就能完成数据库操作,在Python网页开发中应用十分广泛。

环境准备与安装
首先需要在Python环境中安装SQLAlchemy,如果你使用的是Flask或者Django这类网页框架,也可以根据需要安装对应的扩展包。基础安装命令如下:
pip install sqlalchemy # 如果使用Flask框架,可额外安装Flask-SQLAlchemy pip install flask-sqlalchemy
基础配置与连接
使用SQLAlchemy前需要先创建数据库引擎,配置数据库连接信息。以下是连接SQLite数据库的基础配置示例,你也可以替换为MySQL、PostgreSQL等其他数据库的连接字符串:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 创建数据库引擎,这里使用SQLite作为示例
# 如果是MySQL,连接字符串格式为 mysql+pymysql://用户名:密码@主机地址/数据库名
engine = create_engine('sqlite:///web_db.db', echo=True)
# 创建会话类
Session = sessionmaker(bind=engine)
# 创建会话实例,后续所有数据库操作都通过会话完成
session = Session()
定义数据模型
数据模型是SQLAlchemy的核心,每个模型类对应数据库中的一张表,类的属性对应表的字段。以下定义一个用户表模型,包含id、用户名、邮箱三个字段:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# 创建基类
Base = declarative_base()
class User(Base):
# 指定对应的表名
__tablename__ = 'users'
# 定义字段
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False, unique=True)
email = Column(String(100), nullable=False)
# 创建所有定义的表,首次运行时执行即可
Base.metadata.create_all(engine)
基础增删改查操作
新增数据
新增数据只需要创建模型实例,添加到会话并提交即可:
# 创建用户实例 new_user = User(username='test_user', email='test@ipipp.com') # 添加到会话 session.add(new_user) # 提交会话,保存到数据库 session.commit()
查询数据
SQLAlchemy提供了丰富的查询方法,以下是常见的查询示例:
# 查询所有用户 all_users = session.query(User).all() # 查询id为1的用户 user_by_id = session.query(User).filter_by(id=1).first() # 查询用户名为test_user的用户 user_by_name = session.query(User).filter(User.username == 'test_user').first()
更新数据
更新数据先查询到对应的实例,修改属性后提交会话:
# 查询要更新的用户
user = session.query(User).filter_by(id=1).first()
if user:
# 修改属性
user.email = 'updated@ipipp.com'
# 提交修改
session.commit()
删除数据
删除数据先查询到实例,再删除并提交会话:
# 查询要删除的用户
user = session.query(User).filter_by(id=1).first()
if user:
# 删除实例
session.delete(user)
# 提交删除操作
session.commit()
与网页框架整合示例
以Flask框架为例,整合SQLAlchemy的方式如下,其他框架的整合逻辑类似:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///web_db.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化SQLAlchemy
db = SQLAlchemy(app)
# 定义模型
class Article(db.Model):
__tablename__ = 'articles'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)
# 创建表
with app.app_context():
db.create_all()
# 定义路由,处理网页请求
@app.route('/add_article')
def add_article():
new_article = Article(title='测试文章', content='这是文章内容')
db.session.add(new_article)
db.session.commit()
return '文章添加成功'
if __name__ == '__main__':
app.run(debug=True)
注意事项
- 每次数据库操作完成后,记得及时提交会话或者回滚异常操作,避免数据不一致。
- 生产环境中不要开启引擎的echo参数,该参数会打印所有SQL语句,影响性能。
- 会话对象不是线程安全的,在多线程的网页开发中,每个请求应该创建独立的会话实例。
- 定义模型时,合理设置字段的约束条件,比如非空、唯一约束,减少无效数据入库。
SQLAlchemyPython网页开发ORM修改时间:2026-07-08 17:42:25