SQLAlchemy ORM框架能让你用Python的方式操作数据库,告别繁琐的SQL语句。
1.最简单的使用示例:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @mail : lshan523@163.com # @Time : 2025/2/10 10:01 # @Author : Sea # @File : SqlAlchemyTest.py# @Purpose : # @history : # **************************** # 连接数据库 # 参考文章: https://mp.weixin.qq.com/s?__biz=MzUxMzU4MjI1OQ==&mid=2247492924&idx=1&sn=bcb84b089ac7f86077196db67da4452b&chksm=f95050e0ce27d9f6f1949d69909a0a5b9e1d790b20e6a00d5a0332d4d6ee5fb8d64116e5c3f3&scene=27 from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base, sessionmaker # ####### 1 创建数据库引擎 ##### engine = create_engine('sqlite:///xxx.db') # mysql也可以这样连: MySQL要装pymysql SQLite是Python # engine = create_engine('mysql+pymysql://用户名:密码@localhost/数据库名') Base = declarative_base() Session = sessionmaker(bind=engine) session = Session() # ####### 2 声明表 ##### from sqlalchemy import Column, Integer, String class User(Base): __tablename__ = 'user' id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer) email = Column(String(120), unique=False) def __repr__(self): return f'<User {self.name,self.email}>' # ###### 3 创建所有的表 ##### Base.metadata.create_all(engine) # 添加数据 new_user = User(name='小明2', age=18, email='xiaoming@qq.com') session.add(new_user) session.commit() # 查询数据 users = session.query(User).all() print(users) # young_users = session.query(User).filter(User.age < 20).all() # 带条件查询 # first_user = session.query(User).first() # 查第一个 # 修改数据 user = session.query(User).filter_by(name='小明').first() user.age = 19 session.commit() # 删除数据 session.delete(user) session.commit() # 批处理 # 批量插入 users = [ User(name=f'用户{i}', age=20+i) for i in range(100) ] session.bulk_save_objects(users) session.commit() # 批量更新 session.query(User).filter( User.age < 20 ).update({User.age: User.age + 1}) session.commit()
2. 关系模型
from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) title = Column(String(100)) user_id = Column(Integer, ForeignKey('users.id')) # 建立关系 author = relationship('User', backref='posts') # 使用关系 new_post = Post(title='我的第一篇博客', author=user) session.add(new_post) session.commit() # 查看用户的文章 user.posts # 直接获取该用户的所有文章
温馨提示:建立关系后,SQLAlchemy会自动处理连接查询,不用写join啦!
查询技巧:
from sqlalchemy import desc, or_, and_ # 排序 users = session.query(User).order_by(desc(User.age)).all() # 复杂条件 users = session.query(User).filter( or_( User.age < 20, User.name.like('小%') ) ).all() # 分页查询 page = 1 per_page = 10 users = session.query(User).offset( (page-1)*per_page ).limit(per_page).all()
实用小技巧:
# 防止重复添加 user = User(name='小红', age=20) session.merge(user) # merge代替add # 回滚操作 try: session.add(user) session.commit() except: session.rollback() raise finally: session.close() # 打印原生SQL语句 print(str(query.statement))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!