page contents

Python 数据库操作神器,一文掌握 ORM!

SQLAlchemy 是 Python 最强大的 ORM 框架,支持 MySQL、PostgreSQL、SQLite、SQL Server 等数据库。本篇文章带你 从入门到实战,彻底掌握 SQLAlchemy!

attachments-2025-04-ZhjkTxsf67ecd56b38031.jpgSQLAlchemy 是 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入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1884 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1884 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章