Python SQLAlchemy教程:玩转Sqlite3,让数据库操作飞起来!

Python SQLAlchemy教程:玩转Sqlite3,让数据库操作飞起来!

技术教程gslnedu2025-03-16 14:21:113A+A-

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。

前期基础教程:

「Python3.11.0」手把手教你安装最新版Python运行环境

讲讲Python环境使用Pip命令快速下载各类库的方法

Python启航:30天编程速成之旅(第2天)-IDE安装

【Python教程】JupyterLab 开发环境安装


导语:为什么SQLAlchemy是Python开发者的“数据库瑞士军刀”?

在数据为王的时代,掌握数据库操作是每个程序员的必修课。SQLAlchemy作为Python最强大的ORM工具,不仅能让你告别繁琐的SQL语句,还能通过面向对象的方式轻松管理数据!本文将从零开始,手把手教你用SQLAlchemy操作SQLite3数据库,搭配真实案例+避坑指南,让你30分钟从小白进阶高手!


一、环境搭建:5分钟快速上手

1.安装SQLAlchemy

pip install sqlalchemy

提示:Python自带sqlite3模块,无需额外安装。

2.创建数据库连接

from sqlalchemy import create_engine

# 内存数据库(临时测试用)
engine = create_engine('sqlite:///:memory:', echo=True)  

# 本地文件数据库(持久化存储)
engine = create_engine('sqlite:///mydatabase.db') 

参数解析:echo=True可实时查看生成的SQL语句,调试神器!


二、数据建模:用Python类定义数据库表

1.定义基类与用户表

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50), nullable=False, unique=True)
    age = Column(Integer)
    email = Column(String(100))

    def __repr__(self):
        return f""

核心技巧:nullable=False强制字段非空,unique=True防重复。

2.一键生成表结构

Base.metadata.create_all(engine)  # 自动创建所有继承Base的类对应的表

三、CRUD实战:增删改查的“黄金四步”

1.新增数据

from sqlalchemy.orm import Session

with Session(engine) as session:
    # 单条插入
    user1 = User(name="张三", age=25, email="zhangsan@example.com")
    session.add(user1)

    # 批量插入
    users = [
        User(name="李四", age=30),
        User(name="王五", age=28)
    ]
    session.add_all(users)
    session.commit()  # 提交事务!

避坑:忘记commit()会导致数据丢失!

2.查询数据

# 查询所有用户
users = session.query(User).all()

# 条件过滤(查询年龄>25的用户)
users = session.query(User).filter(User.age > 25).all()

# 复杂查询(邮箱以example.com结尾且名字含“张”)
from sqlalchemy import and_
users = session.query(User).filter(
    and_(
        User.email.endswith("example.com"),
        User.name.like("%张%")
    )
).order_by(User.age.desc()).limit(5)

进阶:filter_by用于简单条件,filter支持复杂逻辑。

3.更新与删除

# 更新李四的年龄
lisi = session.query(User).filter_by(name="李四").first()
lisi.age = 31
session.commit()

# 删除王五
wangwu = session.query(User).filter_by(name="王五").first()
session.delete(wangwu)
session.commit()

四、高级玩法:关系模型与事务管理

1.一对多关系(用户与文章)

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(100))
    content = Column(String(500))
    user_id = Column(Integer, ForeignKey('users.id'))  # 外键关联
    author = relationship("User", back_populates="articles")

User.articles = relationship("Article", back_populates="author")

效果:通过user.articles直接获取用户所有文章。

2.事务保障(银行转账案例)

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Article(Base):
    __tablename__ = 'articles'
    id = Column(Integer, primary_key=True)
    title = Column(String(100))
    content = Column(String(500))
    user_id = Column(Integer, ForeignKey('users.id'))  # 外键关联
    author = relationship("User", back_populates="articles")

User.articles = relationship("Article", back_populates="author")

五、性能优化:让数据库“飞”起来的秘诀

1.索引加速查询

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), index=True)  # 为name字段创建索引

2.批量操作代替循环

# 低效写法(循环插入)
for i in range(1000):
    session.add(User(name=f"user{i}"))

# 高效写法(批量插入)
session.bulk_save_objects([User(name=f"user{i}") for i in range(1000)])

提速10倍以上!

3.启用WAL模式(解决多线程锁竞争)

engine = create_engine('sqlite:///mydatabase.db?check_same_thread=False')
with engine.connect() as conn:
    conn.execute(text("PRAGMA journal_mode=WAL"))  # 写前日志模式

六、避坑指南:新手常犯的5大错误

  1. 忘记提交事务:session.add()后必须调用session.commit()。
  2. 混淆filter与filter_by:filter(User.name == 'xx') vs filter_by(name='xx')。
  3. 滥用自动提交:autocommit=True可能导致数据不一致,慎用!
  4. 忽略线程安全:多线程场景需设置check_same_thread=False。
  5. 未处理异常:事务中务必添加try/except和session.rollback()。

结语:SQLAlchemy + SQLite3 = 轻量级数据管理的终极答案

无论是开发个人博客、小型电商系统,还是物联网数据存储,SQLAlchemy都能让你以“Pythonic”的方式优雅操作数据库。本文从安装到实战,从基础到高阶,覆盖了90%的应用场景,收藏本文,你将不再为数据库操作发愁!

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8