SQLAlchemy 是 Python 最强大的 ORM 框架,支持 MySQL、PostgreSQL、SQLite、SQL Server 等数据库。本篇文章带你 从入门到实战,彻底掌握 SQLAlchemy!
1、什么是 SQLAlchemy?为什么要用 ORM?
SQLAlchemy 是 Python 的 ORM(对象关系映射)框架,可以用 Python 代码 直接操作数据库,而 不需要写 SQL。
为什么要用 ORM?
数据库操作更 Pythonic(面向对象)
兼容多种数据库(MySQL、PostgreSQL、SQLite 等)
自动生成 SQL,避免 SQL 注入风险
更易维护,代码比 SQL 语句更清晰
传统 SQL 操作(手写 SQL)
import sqlite3
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
conn.commit()
cursor.close()
conn.close()SQLAlchemy
操作(ORM 方式)
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
engine = create_engine("sqlite:///test.db")
Base = declarative_base()
classUser(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()
SQLAlchemy 让数据库操作更清晰、更 Pythonic!
2、安装 & 配置 SQLAlchemy
安装 SQLAlchemy
pip install sqlalchemy
如果使用 MySQL,需要额外安装 MySQL 驱动:
pip install pymysql
创建数据库连接
from sqlalchemy import create_engine
# 连接 SQLite
engine = create_engine("sqlite:///test.db")
# 连接 MySQL(需要安装 pymysql)
# engine = create_engine("mysql+pymysql://user:password@localhost/dbname")
SQLAlchemy 通过 create_engine() 统一管理数据库连接!
3、创建 ORM 模型(定义数据表)
定义一个 User 表
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
ORM 方式定义表结构,避免手写 SQL !
4、CRUD 操作(增删改查)
创建数据库会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
所有数据库操作都通过 session 进行!
插入数据(Create)
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit()
使用 session.add()
添加新数据,commit() 提交!
查询数据(Read)
1、查询所有用户
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
2、按条件查询
user = session.query(User).filter_by(name="Alice").first()
print(user.id, user.name, user.age)
3、多条件查询
from sqlalchemy import and_, or_
# 年龄 > 20 且姓名是 Alice
users = session.query(User).filter(and_(User.age > 20, User.name == "Alice")).all()
# 年龄 > 20 或 姓名是 Alice
users = session.query(User).filter(or_(User.age > 20, User.name == "Alice")).all()
filter() 方式类似 SQL WHERE 语句!
更新数据(Update)
user = session.query(User).filter_by(name="Alice").first()
user.age = 30
session.commit()
直接修改对象属性,再 commit() 保存!
删除数据(Delete)
user = session.query(User).filter_by(name="Alice").first()
session.delete(user)
session.commit()
使用 session.delete() 删除对象!
5、进阶操作:一对多 & 多对多
一对多关系(User → Post)
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"))
user = relationship("User", back_populates="posts")
User.posts = relationship("Post", order_by=Post.id, back_populates="user")
relationship() 让表之间建立关系,查询时更方便!
多对多关系(User ↔ Course)
from sqlalchemy import Table
# 关联表
user_course = Table(
"user_course", Base.metadata,
Column("user_id", Integer, ForeignKey("users.id")),
Column("course_id", Integer, ForeignKey("courses.id"))
)
classCourse(Base):
__tablename__ = "courses"
id = Column(Integer, primary_key=True)
name = Column(String(100))
users = relationship("User", secondary=user_course, back_populates="courses")
User.courses = relationship("Course", secondary=user_course, back_populates="users")
多对多关系通过 secondary 关联表实现!
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!