怎样用python+sqlalchemy获得mssql视图对应物理表关系(二)

ops/2024/10/21 5:47:59/

话不多说

目标:为了实现低代码数据视图对接,有必要得到视图所对应物理表及字段名称,字段类型等

1)约束:视图中用到的物理表不能起别名,所以修改上一篇中存储过程建立语句

USE [agui_conn]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetOrdersByTimestamp]    Script Date: 09/29/2024 14:40:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetOrdersByTimestamp]@Timestamp NVARCHAR(100),@Condition NVARCHAR(100) -- 假设这是一个额外的条件,如订单状态
AS
BEGINIF OBJECT_ID('dbo.vw_OrdersByTimestamp', 'V') IS NOT NULLBEGINEXEC sp_executesql N'DROP VIEW dbo.vw_OrdersByTimestamp';END-- 创建一个视图来显示所需的订单信息DECLARE @sql NVARCHAR(MAX);SET @sql = N'CREATE VIEW dbo.vw_OrdersByTimestamp ASSELECT Users.Username as 用户名, Orders.OrderTime as 订单时间,Orders.Amount as 订单金额,'''+ @Timestamp + ''' AS 查询时间FROM OrdersINNER JOIN Users ON Orders.UserId = Users.UserIdWHERE (Orders.Status = ''' + @Condition+ ''')'; -- 假设订单表中有一个Status字段o.OrderTime >= ''' + CONVERT(NVARCHAR, @Timestamp, 120) + ''' ANDEXEC sp_executesql @sql;END

2)在 SQL Server 中,用存储过程创建的视图没有出现在 sys.views 中,尝试查询 sys.objects 来获取所有对象的列表:

SELECT OBJECT_SCHEMA_NAME(object_id) AS SchemaName,OBJECT_NAME(object_id) AS ViewName
FROM sys.objects
WHERE OBJECTPROPERTY(object_id, 'IsView') = 1;

3)通过sys.objects获得指定视图的描述

SchemaName='dbo'ViewName='vw_OrdersByTimestamp'create_view_query = text(f"""SELECT OBJECT_DEFINITION(OBJECT_ID('{SchemaName}.{ViewName}')) as ViewDefinitionFROM sys.objectsWHERE OBJECTPROPERTY(object_id, 'IsView') = 1AND OBJECT_NAME(object_id) = '{ViewName}'AND OBJECT_SCHEMA_NAME(object_id) = '{SchemaName}'""")result = conn.execute(create_view_query)create_view_result = result.fetchone()view_creation_sql=create_view_result['ViewDefinition']print(view_creation_sql)

结果如图:

4)用正则表达式匹配视图字段名和对应的物理表名及字段名

# 正则表达式匹配视图字段名和对应的物理表名及字段名column_pattern = re.compile(r"(\w+\.\w+) as (\w+)", re.IGNORECASE)# 提取字段映射columns_mapping = column_pattern.findall(view_creation_sql)# 常量值匹配constant_pattern = re.compile(r"'([^']*)' AS (\w+)", re.IGNORECASE)constants_mapping = constant_pattern.findall(view_creation_sql)field_dict = {}for column, alias in columns_mapping:field_dict[f'{alias}'] = columnfor constant, alias in constants_mapping:field_dict[f'{alias}'] = None# 反射视图的列信息table = Table(view_name, metadata, autoload=True, autoload_with=engine)for column in table.columns:v_field = f"{column.name}"tb_field = field_dict[v_field]print(f"视图字段名: {column.name}, 对应表字段: {tb_field}, 数据类型: {column.type}")

最终实现结果

到此,祝大家节日快乐!!!


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

相关文章

C# 泛型使用案例_C# 泛型使用整理

一、系统自带常用的泛型 1.字典&#xff0c;集合 //字典 Dictionary<string, int> dic new Dictionary<string, int>(); //泛型集合 List<int> list new List<int>(); 2.泛型委托&#xff0c;输入参数&#xff0c;输出参数 //泛型 委托---输出参…

【MySQL 06】表的增删查改

目录 1.insert 增添数据 1.1单行数据 全列插入 1.2多行数据 指定列插入 1.3插入否则更新 1.4.插入否则替换 2.select查找 2.1 全列查找 2.2指定列查找 2.3查询字段为表达式 2.4为查询结果指定别名 2.5 结果去重 2.6 where条件查询 2.7结果排序 2.8.筛选分页结果…

Java Web开发简介

Java Web开发涉及到构建基于Java技术的网页应用程序&#xff0c;通常需要以下技能和软件&#xff1a; 技能&#xff1a; Java基础知识&#xff1a;熟悉Java语言的基础&#xff0c;包括数据类型、控制结构、异常处理、集合框架等。 Java EE&#xff08;Jakarta EE&#xff09;…

2024年7月大众点评宁波美食店铺基础信息

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时&#xff0c;大众点评的数据参考价值非常大&#xff0c;截至2024年7月&#xff0c;大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 宁波餐饮美食店铺约7.3万家&#xff0c;有均…

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中&#xff0c;使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私&#xff0c;还是为了访问某些特定资源&#xff0c;代理IP都扮演着重要的角色。今天&#xff0c;我们就来聊聊SOCKS5代理和HTTP代理&#xff0c;看看这两者到底哪个更快…

c语言实例

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言 题目描述 创建一个双链表&#xff0c;并将链表中的数据输出到控制台&#xff0c;输入要查找的数据&#xff0c;将查找到的数据删除&#xff0c;并且显示删除后的链表 下面是一个用C语言实现的双链表&#…

Java ERP管理系统源码解析:微服务架构实践Spring Cloud Alibaba与Spring Boot

在当今数字化浪潮的推动下&#xff0c;企业对于高效、稳定且易于扩展的管理系统需求日益增长。为了满足这一需求&#xff0c;我们精心打造了一款基于Java技术的鸿鹄ERP&#xff08;Enterprise Resource Planning&#xff09;管理系统。该系统充分利用了Spring Cloud Alibaba、S…

微信小程序——婚礼邀请函

目的 1.掌握微信小程序的开发技术&#xff0c;包括页面布局、交互设计、数据存储等。 2.学会运用微信小程序的各种组件和 API&#xff0c;实现个性化的婚礼邀请函功能。 3.通过制作婚礼邀请函小程序&#xff0c;提升创意设计和用户体验优化的能力。 4.了解如何在小程序中整…