Python ORM框架SQLAlchemy学习笔记之关系映射实例

Python ORM框架SQLAlchemy学习笔记之关系映射实例

什么是ORM框架

ORM (Object Relational Mapping) 即对象关系映射,是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系型数据库中。

ORM框架的优点:

  • ORM框架能够消除常见的 SQL 注入问题,提高代码的安全性。
  • ORM框架主要支持多种非常流行的数据库,包括MySQL, PostgreSQL等,具有很强的兼容性。
  • ORM框架能够使程序的可维护性和可重用性更高,程序员更注重开发业务逻辑而非SQL查询。

SQLAlchemy概述

SQLAlchemy是Python语言的开源ORM框架之一,使用Apache License 2.0发行。它实现了大部分的SQL92标准,包括如何声明关系、联结、执行原始SQL语句等。

SQLAlchemy提供两个主要的工具:SQLAlchemy Core和SQLAlchemy ORM,其中SQLAlchemy Core为SQLAlchemy提供了一些底层的SQL执行工具,而SQLAlchemy ORM则提供了一个通过关系映射为面向对象程序设计的QLAPI。

至于为什么要使用SQLAlchemy ORM,以下几点原因:

  • 抽象数据库操作以及 Model 层,风格类似 Django ORM 但不限于 django 的使用范围;
  • 持有一个 SQL 核心,提供了一个直接使用原生 SQL 语句的实现方式;
  • 提供更加可控的事务会话,避免除了自己业务意愿之外引入多余的事务阻塞等。

SQLALchemy与ORM花式查询

SQLAlchemy提供了两种主要方式来进行查询:

  • 通过SQLAlchemy Core;
  • 通过SQLAlchemy ORM。

这里我们选择通过SQLAlchemy ORM的方式来进行查询。SQLAlchemy ORM的查询方式可以分为基础查询和高级查询两种方式。

基础查询

基础查询通过select()函数来构建查询语句,常用的过滤器方法包括:

  • filter():通过指定条件来选择性返回结果;
  • filter_by():通过指定字段和值来选择性返回结果;
  • first():返回第一条记录;
  • one():返回第一条且保证只有一条记录,否则抛出异常。

示例:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('mysql+pymysql://root:123456@localhost/test?charset=utf8', 
                       echo=True, encoding='utf-8')

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    age = Column(Integer)

from sqlalchemy.orm import sessionmaker

DBSession = sessionmaker(bind=engine)

session = DBSession()

# 基础查询示例
result = session.query(User).first()
print(type(result))
print(result.name)

高级查询

高级查询可以通过filter()、filter_by()等方法和运算符操作来实现复杂的查询,SQLAlchemy ORM还提供了类似原生SQL语句的查询方式。常用的方法包括:

  • group_by():对查询结果进行分组;
  • having():对查询结果进行过滤;
  • order_by():对查询结果进行排序;
  • limit()和offset():用于分页。

示例:

# 高级查询示例1
result = session.query(User).filter(User.name == 'aaron').filter(User.age == 20).all()

# 高级查询示例2
from sqlalchemy import func
result = session.query(User.name, func.count('*').label('count')).group_by(User.name).all()

# 高级查询示例3
from sqlalchemy.orm import aliased
a1 = aliased(User)
a2 = aliased(User)
result = session.query(a1.name, a2.name).filter(a1.age > a2.age).all()

示例1表示查询名字为aaron,并且年龄为20岁的所有用户;示例2表示查询用户按名字分组,并统计每组用户数量;示例3表示查询年龄比自己小的用户,并将这些结果按照名字进行聚合。在示例3中,我们使用了一个新的技术:Aliased对象来生成一个User表的副本,并用副本来实现查询比当前用户年龄小的用户。

总结

本文介绍了Python ORM框架SQLAlchemy的查询方式,并提供了基础查询和高级查询两种具体示例。如果你是Python开发者,想要借助一个强大、灵活且兼容多种数据库的ORM框架来完成你的数据库开发,那么SQLAlchemy肯定是一个不错的选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python ORM框架SQLAlchemy学习笔记之关系映射实例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 十大 Node.js 的 Web 框架(快速提升工作效率)

    下面是详细讲解“十大 Node.js 的 Web 框架(快速提升工作效率)”的完整攻略。 标题:十大 Node.js 的 Web 框架 什么是 Node.js 的 Web 框架? Node.js 是一个 Javascript 运行环境,提供了基于事件驱动的异步 IO 模型,可用于开发高效的、可扩展的网络应用程序,但仅提供底层 API,需要使用 Web 框架来…

    人工智能概览 2023年5月25日
    00
  • 在OpenCV里使用特征匹配和单映射变换的代码详解

    要实现在OpenCV中使用特征匹配和单映射变换的代码,可以按照以下流程进行: 导入图像并调整大小 可以使用OpenCV中的cv2.imread()方法导入图片,其中第二个参数表示读取图片的颜色格式,通常使用cv2.IMREAD_COLOR或cv2.IMREAD_GRAYSCALE。读入后,可以使用cv2.resize()调整大小。 示例代码: import …

    人工智能概论 2023年5月25日
    00
  • 新手必备Python开发环境搭建教程

    新手必备Python开发环境搭建教程 简介 Python是一门非常流行的编程语言,在多数领域都有广泛的应用。Python的优势在于语法简洁明了,易于学习,同时也有非常强大的开源社区支持。在开始Python编程之前,需要先搭建Python的开发环境。本文将介绍如何在Windows和macOS系统中搭建Python开发环境。 Windows系统 下载Python…

    人工智能概览 2023年5月25日
    00
  • 详解Nodejs 部署到阿里云全过程

    详解Nodejs部署到阿里云全过程 本文将详细介绍如何将Node.js应用程序部署到阿里云服务器上。 前置条件 在开始之前,您需要满足以下条件: 一台阿里云ECS实例,主机操作系统建议选择 Ubuntu 16.04 64bit。 已安装Node.js和npm。 步骤一:安装PM2 PM2是一个Node.js应用程序的进程管理器,可以在后台运行,自动重启失效的…

    人工智能概论 2023年5月24日
    00
  • java实现腾讯ocr图片识别接口调用

    接下来我将详细讲解Java实现腾讯OCR图片识别接口调用的完整攻略。 一、前置条件 在开始使用腾讯OCR接口之前,我们需要先获取一个API密钥,这个密钥可以通过腾讯云官网申请。 二、构建项目 我们可以使用Maven或Gradle等构建工具构建我们的Java项目。在项目中添加如下依赖: <dependency> <groupId>com…

    人工智能概论 2023年5月25日
    00
  • 在Django中使用Sitemap的方法讲解

    当我们创建了一个Django网站并且希望在搜索引擎中正确地索引我们的网站时,我们可以使用Django中内置的Sitemap框架。下面是在Django中使用Sitemap的方法讲解: 1. 创建一个Sitemap对象 在你的Django应用程序中,你需要创建一个继承自django.contrib.sitemaps.Sitemap类的Sitemap对象。在Sit…

    人工智能概览 2023年5月25日
    00
  • Django migrations 默认目录修改的方法教程

    下面是详细讲解“Django migrations 默认目录修改的方法教程”的完整攻略。 1. 背景 在Django项目中,我们经常会使用migrations来追踪数据库模型的修改,从而进行数据库结构的升级和迁移。而默认情况下,每个app的migrations都会存放在app目录下的migrations子目录中,但是有时候我们希望把所有的migrations…

    人工智能概览 2023年5月25日
    00
  • pytorch实现mnist分类的示例讲解

    下面我来为你详细讲解“pytorch实现mnist分类的示例讲解”的完整攻略。 1. 确定需求 在开始编写代码之前,我们需要明确实现的需求是什么。在这个示例中,我们需要使用pytorch搭建神经网络对手写数字图片进行分类。 2. 准备数据集 接下来,我们需要准备mnist数据集,该数据集包含了训练集和测试集。首先,我们需要安装pytorch和torchvis…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部