page contents

orm——Python中最好用的对象关系映射库!

今天给大家来聊聊Python中的一个超级强大的库——ORM(对象关系映射库)。这个库就像是给数据库操作装了一副能直接看到《星球大战》中全息影像的AR眼镜,让你不再需要用抽象的SQL语句去冥想,直接就可以用Python对象来操作数据库啦。

attachments-2025-05-c9f2uaAx6818141ad070a.jpg今天给大家来聊聊Python中的一个超级强大的库——ORM(对象关系映射库)。这个库就像是给数据库操作装了一副能直接看到《星球大战》中全息影像的AR眼镜,让你不再需要用抽象的SQL语句去冥想,直接就可以用Python对象来操作数据库啦。

ORM究竟是啥?

ORM是Python里的一种方法,能让数据库操作变得像用Python操作字典那样简单。通过ORM,你可以不用写一条条SQL语句去更新、查询数据库,而是通过Python对象来直接交互。这种方法使得开发变得更高效,代码更易读易维护。

ORM功能速览

数据库对象化:ORM让你可以把数据库中的表想象成一个Python类,表中的每一行数据就是一个对象实例。

查询魔法:你不再需要写复杂的SQL语句进行数据查询,而是可以直接使用Python代码如查询列表一样来查询数据库。

动态更新:用ORM可以直接修改对象的属性,改动会立即反映到数据库中,就像修改一个字典的键值一样简单。

安全删除:删除对象实例如同删除列表项一样,ORM会为你负责所有的关联数据的清理工作,让你不会因为删除一个对象而破坏整个数据库的完整性。

实战篇:从安装到删库跑路

我们会从安装ORM库、理解它的核心概念、再到简单使用这三个方面来聊聊它的使用。

安装配置

首先,要安装这个库,你只需要一句命令,就像打开神秘魔法书一样简单:

1pip install SQLAlchemy

是的,这里我用的是SQLAlchemy,一个非常流行的ORM库。

核心概念

让我们来看看如何定义一个ORM模型,就像给我们的魔法构建一个实体模型一样:

 1from sqlalchemy import Column, String, Integer, create_engine

 2from sqlalchemy.orm import sessionmaker

 3from sqlalchemy.ext.declarative import declarative_base

 4

 5Base = declarative_base()

 6

 7class User(Base):

 8    __tablename__ = 'users'  # 如果你对表有特殊要求,可以用__mapper_args__

 9

10    id = Column(Integer, primary_key=True)

11    name = Column(String(20))

12    age = Column(Integer)

在这里我们定义了一个User,它对应着一个名为“users”的表,里面包含id、name和age三个字段。

实战:增删查改

下面我们就用这个User来练练手,如何进行数据的增删查改。

 1engine = create_engine("sqlite:///test.db")

 2Session = sessionmaker(bind=engine)

 3Base.metadata.create_all(engine)

 4

 5def add_user(name, age):

 6    session = Session()

 7    user = User(name=name, age=age)

 8    session.add(user)

 9    session.commit()

10    session.close()

11

12def query_users():

13    session = Session()

14    users = session.query(User).all()

15    for user in users:

16        print(f"{user.name} {user.age}")

17    session.close()

Q&A:ORM小贴士与坑

ORM虽然强大,但新手难免会遇到一些坑。

Q1:为什么我的代码运行时总是找不到表?

A1:首先确认你的模型是否已经表映射完成,并且是否已经创建了数据库表。可以通过执行`Base.metadata.create_all(engine)`来确保所有表都被创建。

Q2:我怎么能够在更新一个对象时不提交整个会话?

A2:通常情况下,会话对象是你存储更新详细信息的地方,为了保证事务的完整性,通常是在会话对象上进行手动提交。如果你只想修改某个对象而不立即提交,可以在修改对象后调用`session.commit()`。

进阶之路:深入了解和实践

如果你想成为ORM使用的大师,深入理解事务,掌握级联删除等高级功能都是必不可少的。这里我们就以级联删除为例:

 1from sqlalchemy.orm import relationship

 2

 3class Post(Base):

 4       __tablename__ = 'posts'

 5    id = Column(Integer, primary_key=True)

 6    title = Column(String)

 7    user_id = Column(Integer, ForeignKey('users.id'))

 8    user = relationship("User", back_populates="posts")

 9

10User.posts = relationship("Post", order_by=Post.id, back_populates="user")

11

12session.delete(some_user)

13session.commit()

通过设置关系的back_populates属性,可以实现级联删除,删除用户时自动删除该用户的帖子。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-05-05 09:28
  • 阅读 ( 68 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2176 篇文章

作家榜 »

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