ORM(对象关系映射)的概念,并说明在Python中如何使用

ORM(对象关系映射)的概念,并说明在Python中如何使用

ORM(对象关系映射)是一种编程技术,它实现了将关系型数据库中的数据映射到程序中的对象模型,使得开发者能够使用面向对象的方式来操作数据库。通过ORM,开发者可以无需编写大量的SQL语句,而是直接通过操作对象来完成数据库的增删改查等操作。

ORM的核心思想是将数据库中的表(table)映射为程序中的类(class),将表中的行(row)映射为类的实例(object),将表中的列(column)映射为类的属性(attribute)。这样,开发者就可以通过操作对象来间接地操作数据库。

在Python中,有很多流行的ORM库,如SQLAlchemy、Django ORM、Peewee等。下面以SQLAlchemy为例,说明如何在Python中使用ORM。

首先,你需要安装SQLAlchemy库:

复制代码

bash复制代码

|---|--------------------------|
| | pip install sqlalchemy |

然后,你可以按照以下步骤使用SQLAlchemy进行ORM操作:

  1. 定义模型

创建一个Python类来表示数据库中的表,并使用SQLAlchemy提供的字段类型来定义表中的列。

复制代码

python复制代码

|---|------------------------------------------------------------|
| | from sqlalchemy import Column, Integer, String |
| | from sqlalchemy.ext.declarative import declarative_base |
| | |
| | Base = declarative_base() |
| | |
| | class User(Base): |
| | __tablename__ = 'users' |
| | id = Column(Integer, primary_key=True) |
| | name = Column(String) |
| | email = Column(String) |

  1. 创建引擎和会话

你需要创建一个数据库引擎,并通过这个引擎创建一个会话(session),会话是ORM与数据库交互的接口。

复制代码

python复制代码

|---|---------------------------------------------------|
| | from sqlalchemy import create_engine |
| | from sqlalchemy.orm import sessionmaker |
| | |
| | # 创建数据库引擎,连接数据库 |
| | engine = create_engine('sqlite:///example.db') |
| | |
| | # 创建会话类 |
| | Session = sessionmaker(bind=engine) |
| | |
| | # 创建会话对象 |
| | session = Session() |

  1. 操作数据库

使用会话对象来执行增删改查等操作。

复制代码

python复制代码

|---|-------------------------------------------------------------------------|
| | # 添加记录 |
| | new_user = User(name='Alice', email='alice@example.com') |
| | session.add(new_user) |
| | session.commit() # 提交事务,将数据保存到数据库 |
| | |
| | # 查询记录 |
| | users = session.query(User).all() # 查询所有用户 |
| | for user in users: |
| | print(user.name, user.email) |
| | |
| | # 修改记录 |
| | user_to_update = session.query(User).filter_by(name='Alice').first() |
| | user_to_update.email = 'alice@newemail.com' |
| | session.commit() # 提交事务,更新数据库中的记录 |
| | |
| | # 删除记录 |
| | user_to_delete = session.query(User).filter_by(name='Alice').first() |
| | session.delete(user_to_delete) |
| | session.commit() # 提交事务,从数据库中删除记录 |

相关推荐
传奇开心果编程1 小时前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
颜颜yan_7 小时前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos
言乐67 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
weixin_440730507 小时前
线程02-并发串行-互斥锁-Semaphore-Event
python·thread
金金计较.7 小时前
Go语言-3
java·开发语言·golang
张小凡vip8 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
毕业设计7038 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
xifangge20258 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板
java·vue.js·python
Wang's Blog9 小时前
Java框架快速入门: Spring Security+OAuth2之云服务集成与多因子认证设计
java·开发语言·spring
门思科技9 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php