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日

相关文章

  • 利用python实现后端写网页(flask框架)

    利用Python实现后端写网页是一种基于Web框架的开发方式,其中Flask框架是一种轻量级的Web框架,非常适合小型应用程序开发。以下是完整的攻略: 准备工作 安装Python编程环境,建议使用Python 3版本。 安装Flask框架,可以使用以下命令进行安装: pip install flask3. 安装其他需要的扩展包,如flask-wtf、flas…

    Flask 2023年5月15日
    00
  • Linux中使用top命令的技巧

    下面是“Linux中使用top命令的技巧”的完整攻略。 一、什么是top命令 top命令是一款常用的系统监控工具,可以实时查看系统的资源占用情况,包括进程占用的CPU、内存等。 二、top命令的参数和用法 top命令的常用参数如下: -d:指定刷新时间,默认为3秒; -p:指定监控的进程PID; -u:指定监控的用户; -H:显示进程的线程; -i:不显示I…

    Flask 2023年5月15日
    00
  • Flask FastCGI(处理Web请求)使用方法详解

    Flask是一款轻量级的Web应用框架,可以用于快速开发Web应用。其中,FCGI是一种处理Web请求的协议,它在承载Web服务器和应用程序之间,提供了可靠的通讯机制。 在实际应用中,我们可以使用Flask FastCGI来将Flask应用部署在Web服务器上,然后通过FastCGI协议与Web服务器进行通讯。 本文将介绍Flask FastCGI的使用方法…

    Flask 2023年3月13日
    00
  • Flask response 对象详情

    Flask框架中的response对象是HTTP响应的一部分,它代表了服务器返回给客户端的的数据。在Flask中,response对象包含响应体、HTTP状态码、消息头等信息。让我们来仔细了解Flask response对象的详细内容。 响应体 响应体指的是返回给客户端的实际数据。可以通过app.route()装饰器的返回值来设置响应体。响应体可以是字符串,…

    Flask 2023年5月16日
    00
  • Python的Flask框架的简介和安装方法

    Flask是一种轻量级的Python web框架,它具有灵活性、简易性和可扩展性。它可以让你快速地创建web应用的原型并进行扩展。下面将介绍如何安装Flask框架及其两个简单的示例。 Flask框架的安装方法 首先,你需要安装pip。pip是一个Python包的管理器,它可以帮助我们很容易地安装、升级和删除Python包。可以通过在终端执行以下命令来安装pi…

    Flask 2023年5月15日
    00
  • 使用python flask框架开发图片上传接口的案例详解

    下面我将详细地讲解使用Python Flask框架开发图片上传接口的完整攻略。 一、安装Flask框架 首先,您需要安装Flask框架。可以使用以下命令在命令行中安装Flask: pip install flask 二、编写Python脚本 接下来,编写Python脚本来实现图片上传接口。以下是例子代码: from flask import Flask, r…

    Flask 2023年5月16日
    00
  • Python flask框架如何显示图像到web页面

    下面是Python Flask框架如何显示图像到web页面的完整攻略。 1. 引入必要的包和文件 首先,在你的Python Flask项目中引入以下必要的包和文件: from flask import Flask, render_template, url_for, send_file import matplotlib.pyplot as plt impo…

    Flask 2023年5月16日
    00
  • python和flask中返回JSON数据的方法

    当Python和Flask用于Web开发时,经常需要返回JSON数据。这是因为现代Web应用程序经常使用JSON(JavaScript Object Notation)作为通信协议。下面是一些关于如何返回JSON数据的方法: 导入Flask和JSON模块 在使用Flask时,要记得导入flask和json模块。在你的Python脚本中,你可以这样做: fro…

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