【Python系列】SQLAlchemy判断非空

ops/2024/10/31 2:17:44/

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

sqlalchemy 查询字段非空

@staticmethod
def get_all_run_id():db = get_sqlalchemy_dbtry:with (Session(db.engine) as session):stmt = select(AlchemyTaskManage).where(AlchemyTaskManage.es_index_prefix.isnot(None))list_res = session.scalars(stmt).all()return [task_info.es_index_prefix for task_info in list_res] if list_res else []except Exception as e:logger.error(f"find task by name An error occurred: {e}")return Nonefinally:db.close_session(session)

在这里插入图片描述

在数据库操作中,确保数据的完整性和准确性是非常重要的。在某些情况下,我们需要查询数据库中某个字段非空的记录。这在处理数据清洗、数据验证或者在进行数据分析时尤为常见。SQLAlchemy 是 Python 中一个非常流行的 SQL 工具包和对象关系映射(ORM)系统,它提供了一种高层的 ORM 以及底层的 SQL 表达式语言,用于数据库的交互。

在上述代码片段中,我们看到了使用 SQLAlchemy 进行数据库查询的一个例子。这段代码定义了一个名为 get_all_run_id 的静态方法,其目的是查询数据库中 es_index_prefix 字段非空的所有记录,并返回这些记录的 es_index_prefix 字段值的列表。

首先,我们来分析这段代码的结构和逻辑:

  1. db = get_sqlalchemy_db:这行代码获取了一个数据库连接对象。这个对象可能是通过某种方式创建的,比如使用 SQLAlchemy 的 create_engine 函数。

  2. try...except...finally:这是一个异常处理结构,用于捕获在数据库操作过程中可能发生的任何异常,并在操作完成后关闭数据库会话。

  3. with (Session(db.engine) as session):这里使用了 SQLAlchemy 的 Session 对象来管理数据库会话。with 语句确保了即使在发生异常的情况下,数据库会话也能被正确关闭。

  4. stmt = select(AlchemyTaskManage).where(AlchemyTaskManage.es_index_prefix.isnot(None)):这是构建查询语句的关键部分。select 函数用于指定要查询的表(在这个例子中是 AlchemyTaskManage),而 where 函数用于添加查询条件。这里的条件是 es_index_prefix 字段不为空(isnot(None))。

  5. list_res = session.scalars(stmt).all():这行代码执行了查询语句,并获取了所有符合条件的记录。scalars 方法用于指定查询结果只包含单个字段的值,而 all 方法用于获取所有符合条件的记录。

  6. return [task_info.es_index_prefix for task_info in list_res] if list_res else []:这是一个列表推导式,用于从查询结果中提取 es_index_prefix 字段的值,并返回一个包含这些值的列表。如果查询结果为空,则返回一个空列表。

  7. logger.error(f"find task by name An error occurred: {e}"):如果在查询过程中发生异常,这行代码会记录错误信息。

  8. db.close_session(session):在 finally 块中,这行代码确保了数据库会话被关闭,无论查询是否成功。

现在,让我们更深入地探讨如何使用 SQLAlchemy 来查询字段非空的记录。
在这里插入图片描述

在 SQLAlchemy 中,查询字段非空通常涉及到使用 isnot(None) 或者 != None 这样的条件。这是因为在 SQL 中,NULL 表示没有值,而 None 在 Python 中表示没有值。SQLAlchemy 允许在查询中直接使用 None 来表示 SQL 中的 NULL

例如,如果想查询 users 表中 email 字段非空的所有用户,可以这样写:

from sqlalchemy import create_engine, select
from sqlalchemy.orm import sessionmaker
from yourapp.models import User# 创建数据库引擎
engine = create_engine('数据库连接字符串')
Session = sessionmaker(bind=engine)# 创建会话
session = Session()try:# 构建查询语句stmt = select(User).where(User.email.isnot(None))# 执行查询users_with_email = session.execute(stmt).scalars().all()# 处理查询结果for user in users_with_email:print(user.email)except Exception as e:print(f"An error occurred: {e}")
finally:session.close()

在这个例子中,我们首先创建了一个数据库引擎和一个会话。然后,我们构建了一个查询语句,指定了要查询的表和条件。接着,我们执行了查询并处理了结果。最后,我们确保了会话被关闭。

在实际应用中,可能需要根据具体的业务逻辑来调整查询条件。例如,可能需要查询某个字段不仅非空,还要满足其他条件,如某个日期字段在特定日期之后,或者某个数值字段在某个范围内。在这种情况下,可以使用 and_or_ 函数来组合多个条件。

stmt = select(User).where(User.email.isnot(None), User.last_login > '2024-01-01')

总之,使用 SQLAlchemy 查询字段非空的记录是一种常见的数据库操作。通过合理地构建查询语句和处理查询结果,可以有效地从数据库中提取所需的数据。同时,确保使用异常处理和会话管理来保证数据库操作的安全性和稳定性。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img


http://www.ppmy.cn/ops/129752.html

相关文章

红队工具---Behinder学习

1.什么是Behinder? Behinder 是一款用于网络渗透测试的安全工具,主要用于对 Web 应用进行攻击和漏洞利用。它提供了强大的功能,是一款红队的大杀器,几乎是现代web安全必须学习的一款webshell管理工具。 主要用途 渗透测试&#…

RSA加密算法实现

Java实现RSA加密算法示例,包括密钥对的生成、加密和解密过程。首先需要导入Java的加密库,这些功能主要通过java.security和javax.crypto包提供。先生成了一个RSA密钥对,包括一个公钥和一个私钥。然后使用公钥加密了一个字符串,并使用私钥解密了加密后的字符串。加密和解密的…

长短期记忆网络(LSTM)详解

长短期记忆网络(LSTM)详解 长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN),旨在解决传统RNN无法有效处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入独特的…

Clace和sqlite-fs:使用SQLite替代文件系统

Clace和sqlite-fs都利用 SQLite 提供取代传统文件系统的创新解决方案,每种解决方案都适用于不同的用例。 Clace 概述 Clace 是一个专为内部工具设计的 Web 应用部署平台,允许开发人员在一台机器上安全地托管多个应用程序。主要功能包括: 跨…

Apache Kyuubi概述——网易数帆(网易杭州研究院)开源

Apache Kyuubi概述 一、Apache Kyuubi 历史 Kyuubi是网易数帆(网易杭州研究院)旗下易数大数据团队开源的一个企业级数据湖探索平台,建立在Apache Spark之上。(Kyuubi依赖Apache Spark提供高性能的数据查询能力,扩展了…

Mongodb-Plus 轻松上手

目录 前言 一、集成配置 1.1 添加依赖 1.2 配置 二、编码示例 三、其他配置 3.1 配置文件 3.1.1 日志配置 3.1.2 字段配置 3.1.3 小黑子模式 3.1.4 逻辑删除配置 logic-not-delete-value​ 3.2 拦截器 3.2.1 数据变动记录拦截器 3.2.2 数据变动记录拦截器 3.3 …

CTF-PWN: 什么是_IO_FILE?

重要概念:fopen()返回的是一个结构体的指针 _IO_FILE 结构体在什么时候被创建? _IO_FILE 结构体的实例是在程序使用标准 I/O 函数(如 fopen、fclose、fread、fwrite 等)时创建和管理的。这个结构体实际上是 GNU C Library (glibc) 用于处理…

基于java SSM医药住院管理系统设计和实现

基于java SSM医药住院管理系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &#x1f4d…