当前位置: 首页 > news >正文

python 中 ORM 是什么 如何使用?

python 中 ORM 是什么 如何使用?

Python ORM 简介与使用

什么是 ORM?

ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于将对象模型与关系型数据库之间进行转换。它允许开发者使用面向对象的方式来操作数据库,而不需要直接编写 SQL 语句。

主要优势

  • 提高开发效率:避免编写复杂的 SQL 语句
  • 数据库无关性:可以轻松切换不同的数据库
  • 类型安全:提供编译时检查
  • 代码可读性:更直观的数据库操作方式

常见的 Python ORM 框架

1. SQLAlchemy(最流行)

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 创建基类
Base = declarative_base()# 定义模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))email = Column(String(100))def __repr__(self):return f"<User(name='{self.name}', email='{self.email}')>"# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 增加数据
new_user = User(name='张三', email='zhangsan@example.com')
session.add(new_user)
session.commit()# 查询数据
users = session.query(User).all()
user = session.query(User).filter_by(name='张三').first()# 更新数据
user.email = 'newemail@example.com'
session.commit()# 删除数据
session.delete(user)
session.commit()# 关闭会话
session.close()

2. Django ORM

# models.py
from django.db import modelsclass User(models.Model):name = models.CharField(max_length=50)email = models.CharField(max_length=100)created_at = models.DateTimeField(auto_now_add=True)def __str__(self):return self.name# 使用示例(在 Django 视图中)
from .models import User# 创建
user = User.objects.create(name='张三', email='zhangsan@example.com')# 查询
all_users = User.objects.all()
user = User.objects.get(id=1)
users = User.objects.filter(name__contains='张')# 更新
User.objects.filter(id=1).update(email='newemail@example.com')# 删除
User.objects.filter(id=1).delete()

3. Peewee(轻量级)

from peewee import *# 创建数据库连接
db = SqliteDatabase('my_app.db')# 定义模型
class BaseModel(Model):class Meta:database = dbclass User(BaseModel):name = CharField()email = CharField()def __str__(self):return self.name# 创建表
db.create_tables([User])# 增加数据
user = User.create(name='张三', email='zhangsan@example.com')# 查询数据
users = User.select()
user = User.get(User.name == '张三')# 更新数据
query = User.update(email='newemail@example.com').where(User.id == 1)
query.execute()# 删除数据
query = User.delete().where(User.id == 1)
query.execute()

SQLAlchemy 高级用法

关系映射

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationshipclass User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))# 一对多关系posts = relationship("Post", back_populates="author")class Post(Base):__tablename__ = 'posts'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="posts")# 使用关系
user = session.query(User).first()
user_posts = user.posts  # 获取用户的所有文章

查询进阶

# 复杂查询
users = session.query(User).filter(User.name.like('%张%')
).order_by(User.id.desc()).limit(10).all()# 连接查询
result = session.query(User, Post).join(Post).filter(User.id == Post.user_id
).all()# 聚合查询
from sqlalchemy import func
count = session.query(func.count(User.id)).scalar()

选择建议

  • SQLAlchemy:功能最强大,适合复杂项目
  • Django ORM:与 Django 框架集成最好
  • Peewee:轻量级,适合小型项目
  • Tortoise ORM:异步支持,适合现代异步应用

ORM 是现代 Python 开发中处理数据库的重要工具,选择合适的 ORM 可以大大提高开发效率和代码质量。

http://www.wuyegushi.com/news/1007.html

相关文章:

  • 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(1)-Tina SDK开发环境搭建
  • 揭秘LummaStealer恶意软件:虚假验证码如何攻陷预订网站
  • 2025年最佳网络监控工具Top8
  • salt安装配置
  • 代码雨
  • WIFI模块-ESP芯片开发框架(ESP32/ESP8266)
  • IQ-tree绘制进化树3-验证
  • 9.回文数
  • Linux 核心目录说明
  • PCIe扫盲——Ack Nak 机制详解(一)
  • OI 数学定理(提高级)
  • BSC系统合约详解 - 若
  • 机器学习,深度学习,神经网络三者的联系和区别
  • 软考系统分析师每日学习卡 | [日期:2025-07-21] | [今日主题:成本效益分析]
  • B2007 A + B 问题
  • 虚拟内存(交换分区)
  • 【langchain】检索
  • win11无法自动休眠
  • RocketMq集群docker部署(2主2从+Dashboard)
  • 带团队后的日常思考(十七)
  • k8s里的taints 和 tolerations
  • 【 IEEE出版】第五届先进算法与神经网络国际学术会议(AANN 2025)
  • 统信 UOS 安装 svn 指南
  • 【IEEE出版】2025年能源技术与电气工程国际学术会议(ETEE 2025)
  • 近期理工类学术会议推荐|电气工程、制造系统、航天技术、人工智能、 数字经济、现金算法等EI会议合集
  • CAXA电子图板2025下载安装详细步骤快速开启电子设计
  • 【权威指南】外发文件加密传输怎么做?3分钟搞定传输安全难题
  • 斜率优化dp
  • 跨平台自动化框架的OCR点击操作实现详解与思考
  • 题解:UVA12172 Matchsticks