flask的orm框架SQLAlchemy查询实现解析

下面我会详细讲解如何使用flask中的ORM框架SQLAlchemy进行查询,并附上两个示例。

一、什么是ORM框架?

ORM (Object-Relational Mapping) 是对象关系映射的缩写,是指通过将数据库中的关系数据转换为对象模型,将程序中的对象模型通过映射转换成关系数据。本质上,ORM框架是一种工具,用于连接Python对象和数据库表之间的对应关系,并且可以实现CRUD(Create, Read, Update, Delete)操作。

Flask中,除了使用SQLAlchemy外还可以使用其它ORM框架,例如Peewee等。但是,SQLAlchemy是一个功能强大和广泛应用的ORM框架,也是Flask中默认的ORM框架。

二、SQLAlchemy查询实现

SQLAlchemy查询可以分为两种方式:Query和Raw SQL。

1. Query方式

Query方式是指通过SQLAlchemy构建查询对象,并使用面向对象的方式来实现数据的操作。

a. 创建查询对象

创建查询对象时需要从baseQuery对象中派生处Query对象,例如:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()  # 创建SQLAlchemy实例

# 创建数据模型
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)

# 创建查询对象
query = db.session.query(User)

b. 筛选条件查询

查询需要满足筛选条件,这时候需要使用filter_by或者filter方法来进行筛选:

# 方法1: filter_by
query = query.filter_by(name='jackson', age=18)

# 方法2:filter
from sqlalchemy import and_
query = query.filter(and_(User.name == 'jackson', User.age == 18))

这里使用and_函数合并多个条件,其中“User.name == 'jackson'”和“User.age == 18”为两个条件。

c. 排序查询

使用order_by方法来进行排序查询:

# 当age相同时按照id升序排列
query = query.order_by(User.age.asc(), User.id.asc())

d. 分页查询

使用limit和offset方法来进行分页查询:

# 第一页,每页条数为10
query = query.offset(0).limit(10)

# 第二页,每页条数为10
query = query.offset(10).limit(10)

e. 查询结果

最后,使用all、first、one等方法来获取查询结果。其中all返回全部结果,first返回第一个结果,而one返回一个结果或者未找到时抛出异常NoResultFound或MultipleResultsFound。

# 返回全部结果
result = query.all()

# 返回第一条结果
result = query.first()

# 返回一个结果
result = query.one()

2. Raw SQL方式

此方式是基于SQLAlchemy的SQL Expression Language实现SQL查询的方式。

sql = "SELECT * FROM table_name WHERE id = :id"
result = db.engine.execute(text(sql), {"id": 1}).fetchall()

通过这种方式可以实现高度定制的SQL查询,但容易引起SQL注入问题,非常慢。

三、示例

下面是两个使用SQLAlchemy查询实现的示例:

示例1:查询用户信息

假设有如下用户数据模型:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    age = db.Column(db.Integer)

我们需要查询年龄18岁的所有用户姓名和年龄。

Query方式实现

from sqlalchemy import and_

query = db.session.query(User.name, User.age)
query = query.filter(User.age == 18)
result = query.all()

Raw SQL方式实现

sql = "SELECT name, age FROM user WHERE age = :age"
result = db.engine.execute(text(sql), {"age": 18}).fetchall()

示例2:查询最新的文章

假设有如下文章数据模型:

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50))
    content = db.Column(db.Text)
    created_at = db.Column(db.DateTime, default=datetime.now())

我们需要查询最新发布的3篇文章标题和发布时间。

Query方式实现

from sqlalchemy import desc

query = db.session.query(Article.title, Article.created_at)
query = query.order_by(desc(Article.created_at)).limit(3)
result = query.all()

Raw SQL方式实现

sql = "SELECT title, created_at FROM article ORDER BY created_at DESC LIMIT 3"
result = db.engine.execute(text(sql)).fetchall()

四、总结

以上就是SQLAlchemy查询的实现方式和两个示例的详细讲解,其中Query方式相对简单和安全,一般情况下优先使用。至于Raw SQL方式,虽然可以满足高度定制的查询需求,但需要注意SQL注入问题,而且也会相对较慢。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:flask的orm框架SQLAlchemy查询实现解析 - Python技术站

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

相关文章

  • Flask框架编写文件下载接口过程讲解

    以下是关于Flask框架编写文件下载接口的完整攻略: 1. 准备工作 在开始编写文件下载接口之前,需要先准备好Flask框架及相关依赖。可以通过以下代码安装所需依赖: pip install flask pip install -U flask-cors 在准备工作完成之后,我们需要按照以下步骤进行文件下载接口的编写。 2. 示例一:下载指定路径文件 接下来…

    Flask 2023年5月16日
    00
  • python优雅实现代码与敏感信息分离的方法

    当我们在编写Python代码时,常常需要使用一些敏感信息,例如数据库密码、API密钥等,这些信息是需要保密的,不能直接写在代码中。同时,我们也希望代码既能保证安全性,又要简洁优雅,不臃肿。本文将介绍一种优雅实现代码和敏感信息分离的方法,以及两个示例说明。 方法介绍 我们可以使用环境变量的方式来实现代码和敏感信息的分离。具体做法如下: 首先,在我们的Pytho…

    Flask 2023年5月16日
    00
  • python的flask框架难学吗

    Python的Flask框架是一个用于web应用程序开发的微框架,它拥有简洁的代码结构,易于学习和使用。而对于初学者而言,学习一门新技术是有难度的,但对于Flask框架而言,它并不难学。下面,我将为您提供详细的攻略。 一、Flask框架的安装 Flask框架的安装十分便捷,您可以通过以下命令行进行Flask框架的安装: pip install Flask 在…

    Flask 2023年5月16日
    00
  • flask框架jinja2模板与模板继承实例分析

    下面是关于“flask框架jinja2模板与模板继承实例分析”的详细攻略。 1. 什么是jinja2模板? Jinja2是一个现代的、健壮的模板引擎,非常适用于Python Web应用程序。它使用简单,模板代码易于维护,并且可以灵活地支持大多数Web应用程序框架。 2. 什么是模板继承? 模板继承是Jinja2模板引擎的一个重要特性,可以帮助我们减少代码重复…

    Flask 2023年5月16日
    00
  • flask中使用SQLAlchemy进行辅助开发的代码

    下面是使用SQLAlchemy进行辅助开发的flask代码攻略。 环境准备 在开始之前,需要安装Flask和SQLAlchemy。可以使用pip进行安装,命令如下: pip install Flask pip install SQLAlchemy 创建Flask应用 首先,在代码文件中导入Flask库和SQLAlchemy库: from flask impo…

    Flask 2023年5月15日
    00
  • FastApi如何快速构建一个web项目的实现

    FastAPI 是一个基于 asyncio 和 pydantic 的现代化 Web 框架,提供了快速开发高性能且易于扩展的 API 工具。适合用于构建现代高性能 Web 服务 API、机器学习应用等等场景。下面将详细讲解如何使用FastAPI快速构建一个Web项目的实现。 一. 安装FastAPI FastAPI可以通过pip安装,安装FastAPI的同时也…

    Flask 2023年5月16日
    00
  • Flask框架使用DBUtils模块连接数据库操作示例

    实现连接数据库 首先需要安装需要的模块。可以通过以下命令安装: pip install Flask pip install DBUtils pip install mysql-connector-python 然后在项目文件夹下创建配置文件config.py,包含以下代码: DATABASE = { ‘host’: ‘localhost’, ‘databas…

    Flask 2023年5月15日
    00
  • python写的ARP攻击代码实例

    下面我就为你介绍一下“Python写的ARP攻击代码实例”的完整攻略以及两条示例说明。 什么是ARP攻击? ARP(Address Resolution Protocol,地址解析协议)是在局域网中用来将IP地址转换为MAC地址的协议。在ARP攻击中,攻击者可以伪造发送方的ARP请求或ARP响应,将正常通信的目标主机的IP地址指向另一个IP地址,从而绕过路由…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部