_decl_class_registry 与 metadata.sorted_tables的区别

一、_decl_class_registry

定义和存储内容

  • _decl_class_registrydeclarative_base 的一个内部属性,它存储的是使用 SQLAlchemy 的声明式映射系统创建的类的映射信息。
  • 它是一个字典,其中键是类的名称(通常是带有模块名的限定名称,如 __main__.SomeClass),值是对应的类对象。

使用场景

  • 当你需要在运行时动态查找已经声明的映射类时,这个属性就非常有用。例如,如果你想检查是否已经定义了某个类,或者想根据类名动态获取类对象进行一些操作,可以使用 _decl_class_registry
  • 它主要用于 SQLAlchemy 的内部机制,例如在一些高级的元编程或动态加载场景中。但因为它是一个内部属性,其使用可能会受到 SQLAlchemy 版本更新和内部实现调整的影响。

示例代码

from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class MyClass(Base):__tablename__ = 'my_table'id = Column(Integer, primary_key=True)print(Base._decl_class_registry)

代码解释

  • 上述代码中,declarative_base() 创建了 Base 类,MyClass 继承自 Base 并进行了表映射。
  • Base._decl_class_registry 会存储 MyClass 及其类名作为键值对,例如 {'__main__.MyClass': <class '__main__.MyClass'>}

二、metadata.sorted_tables

定义和存储内容

  • metadataBase 类的 MetaData 对象,而 sorted_tablesmetadata 的一个属性。
  • sorted_tables 包含了一个列表,列表中的元素是表对象,这些表对象是按照表之间的依赖关系(如外键依赖)进行排序的。表对象包含了表的结构信息,例如表名、列、索引、外键等。

使用场景

  • 当你需要操作表的元数据时,metadata.sorted_tables 是一个非常重要的属性。
  • 你可以用它来遍历所有表,检查表的结构,包括表的列、索引、外键等信息。在创建表的时候,SQLAlchemy 会根据外键等依赖关系将表按正确的顺序添加到 sorted_tables 中,确保表的创建不会因为外键的依赖关系而出现错误。

示例代码

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, IntegerBase = declarative_base()class MyClass(Base):__tablename__ = 'my_table'id = Column(Integer, primary_key=True)for table in Base.metadata.sorted_tables:print(f"Table: {table.name}")for column in table.columns:print(f"  Column: {column.name}")

代码解释

  • 这里使用 declarative_base() 创建了 Base 类,MyClass 类映射到表 my_table
  • Base.metadata.sorted_tables 存储了表对象列表。
  • 遍历 sorted_tables 时,对于每个表,打印表名,再遍历表的列并打印列名。

主要区别总结

  • 存储对象的性质
    • _decl_class_registry 存储的是类对象,而 metadata.sorted_tables 存储的是表对象。
  • 数据结构
    • _decl_class_registry 是一个字典,通过类名来查找类对象;metadata.sorted_tables 是一个列表,存储的是表对象,按表之间的依赖关系排序。
  • 使用目的
    • _decl_class_registry 主要用于查找已声明的映射类,适用于动态查找和元编程场景;metadata.sorted_tables 用于操作表的元数据,包括表的创建顺序和表的详细结构信息检查。

需要注意的是,在正常的 SQLAlchemy 应用开发中,通常更倾向于使用 metadata.sorted_tables 来处理表的元数据操作,因为它是 SQLAlchemy 提供的公开且稳定的接口。而 _decl_class_registry 由于是内部属性,其使用应该谨慎,避免因为 SQLAlchemy 的版本更新导致不可预期的问题。

总的来说,如果你关心的是类的信息和动态查找类,使用 _decl_class_registry;如果你关心的是表的结构、表之间的依赖和表的创建顺序等表元数据相关信息,使用 metadata.sorted_tables

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台管理系统引导功能的实现

引导是软件中经常见到的一个功能&#xff0c;无论是在后台项目还是前台或者是移动端项目中。 那么对于引导页而言&#xff0c;它是如何实现的呢&#xff1f;通常情况下引导页是通过 聚焦 的方式&#xff0c;高亮一块视图&#xff0c;然后通过文字解释的形式来告知用户该功能的作…

vscode通过ssh连接服务器实现免密登录

一、通过ssh连接服务器 1、打开vscode&#xff0c;进入拓展&#xff08;CtrlShiftX&#xff09;&#xff0c;下载拓展Remote - SSH。 2、点击远程资源管理器选项卡&#xff0c;选择远程&#xff08;隧道/SSH&#xff09;类别。 3、点击SSH配置。 4、在中间上部分弹出的配置文件…

解决HBuilderX报错:未安装内置终端插件,是否下载?或使用外部命令行打开。

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 错误描述 在HBuilderX中执行npm run build总是提醒下载插件&#xff1b;图示如下&#xff1a; 但是&#xff0c;下载总是失败。运行项目时候依然弹出上述提醒。 解决方案 …

Wi-Fi Direct (P2P)原理及功能介绍

目录 Wi-Fi Direct &#xff08;P2P&#xff09;介绍Wi-Fi Direct P2P 概述P2P-GO&#xff08;P2P Group Owner&#xff09;工作流程 wifi-Direct使用windows11 wifi-directOpenwrtwifi的concurrent mode Linux环境下的配置工具必联wifi芯片P2P支持REF Wi-Fi Direct &#xff…

分享:osgb倾斜数据转cesium-3dtiles 小工具.

背景: 很多知识殊途同归,在三维软件这块,少不了要和各种各样的数据格式打交道.osgb,stl,obj,3dtiles,3ds等等..虽然里面本质核心基本都是几何数据拓扑数据材质纹理数据等等,但是由于其组织方式不同和特殊的应用场景,导致很多模型需要转来转去...相信很多人在这方面都或多或少吃…

spring boot 多数据源集成mysql、postgresql、phoenix、doris等

如何搭建多数据源项目只要以下简单几步; 一. 创建核心在config.datasource文件夹里 二. 引入相对应的jar包 三. 创建数据库连接配置 四. 写逻辑代码进行验证 1.DataSource package com.irootech.config.datasource;import java.lang.annotation.*;Target({ElementType.MET…

25年01月HarmonyOS应用基础认证最新题库

判断题 “一次开发&#xff0c;多端部署”指的是一个工程&#xff0c;一次开发上架&#xff0c;多端按需部署。为了实现这一目的&#xff0c;HarmonyOS提供了多端开发环境&#xff0c;多端开发能力以及多端分发机制。 答案&#xff1a;正确 《鸿蒙生态应用开发白皮书》全面阐释…

uniapp 导入uview-plus,使用组件出现,页面出现<up-parse>元素不存在,请检查你的代码

错误截图&#xff1a; 原因&#xff1a; 未按照官网方式进行配置&#xff0c;需要进行以下配置。具体详情 // pages.json {"easycom": {"autoscan": true,// 注意一定要放在custom里&#xff0c;否则无效&#xff0c;https://ask.dcloud.net.cn/question…

unity 播放 序列帧图片 动画

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、方法一&#xff1a;代码控制播放序列帧1、设置图片属性2、创建Image组件3、简单的代码控制4、挂载代码并赋值 二、方法二&#xff1a;直接使用1.Image上添加…

使用JMeter玩转tidb压测

作者&#xff1a; du拉松 原文来源&#xff1a; https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的&#xff0c;所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具&#xff0c;直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…

CANN 学习——基于香橙派 KunpengPro(1)

异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是昇腾针对AI场景推出的异构计算架构&#xff0c;向上支持多种AI框架&#xff0c;包括MindSpore、PyTorch、TensorFlow等&#xff0c;向下服务AI处理器与编程。 1CANN 总体架构 CANN 软件架…

计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

海陵HLK-TX510人脸识别模块 stm32使用

一.主函数 #include "stm32f10x.h" // Device header #include "delay.h" #include "lcd.h" #include "dht11.h" #include "IOput.h" #include "usart.h" //#include "adc.h" …

apex安装

安装过程复杂曲折&#xff0c;网上说的很多办法&#xff0c;貌似成功了&#xff0c;实际还是没起作用。 先说成功过程&#xff0c;执行下面命令&#xff0c;安装成功&#xff08;当然&#xff0c;前提是你要先配置好编译环境&#xff09;&#xff1a; &#xff08;我的环境&a…

虹软人脸识别

虹软人脸识别 一.虹软人脸识别1. 获取APP_ID与SDK_KEY2. 获取SDK二.Spring整合1. jar包引入2. yaml配置3. 配置类4. 工具类5. api接口6. 启动加载三.前端四.相关文献一.虹软人脸识别 开发者平台 1. 获取APP_ID与SDK_KEY 2. 获取SDK 开发文档 jar包与dll文件

oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)

oracle的闪回查询&#xff0c;可以查询提交在表空间的闪回数据&#xff0c;并可以还原所查询的数据&#xff0c;用于恢复短时间内的delele 或者 update 误操作&#xff0c;非常方便&#xff0c;缺点是只能恢复大概几小时内的数据。 文章目录 概要闪回查询恢复数据的主要方法包括…

【第01阶段-基础必备篇-第二部分--Python之基础】04 函数

1 定义函数 自定义函数的语法格式如下&#xff1a; 以英文半角冒号结尾 由于定义函数时的参数不是实际数据&#xff0c;会在调用函数时传递给它们实际数据&#xff0c;所以我们称定义函数时的参数为形式参数&#xff0c;简称形参:称调用函数时传递的实际数据为实际参数&#x…

Ubuntu 下载安装 kibana8.7.1

来到 Kibana 和 Es 的版本兼容性列表根据自己的 Es 版本选择合适的 Kibana 版本&#xff1a; https://github.com/elastic/kibana#version-compatibility-with-elasticsearch 尽量让 Kibana 的版本和 Es 的版本保持一致。 来到 Kibana 的版本发布历史页面&#xff1a;https:/…

【PPTist】批注、选择窗格

前言&#xff1a;本篇文章研究批注和选择窗格两个小功能 一、批注 批注功能就是介个小图标 点击可以为当前页的幻灯片添加批注&#xff0c;还能删除之前的批注 如果我们增加了登录功能&#xff0c;还可以在批注上显示当前的用户名和头像&#xff0c;不过现在是写死的。 左侧…

【docker系列】可视化Docker 管理工具——Portainer

1. 介绍 Portainer是一个可视化的Docker操作界面&#xff0c;提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作&#xff08;包括上传下载镜像&#xff0c;创建容器等操作&#xff09;、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录…