Python导出SqlServerl数据字典为excel
sql代码
SELECTtableName = D.name ,tableIntroduce = isnull(F.value,
''),sort = A.colorder,fieldName = A.name,catogary = B.name,bytes = A.Length,lengths = COLUMNPROPERTY(A.id,
A.name,
'PRECISION'),scales = isnull(COLUMNPROPERTY(A.id,
A.name,
'Scale'),
0),isOrNotNull =
CaseWhen A.isnullable = 1 Then '√'Else ''
End,primarays =
CaseWhen exists(SELECT1FROMsysobjectsWherextype = 'PK'and parent_obj = A.idand name in (SELECTnameFROMsysindexesWHEREindid in(SELECTindidFROMsysindexkeysWHEREid = A.idAND colid = A.colid))) then '√'else ''
end,defauts = isnull(E.Text,
''),annotations = isnull(G.[value],
'')
FROMsyscolumns A
Left Joinsystypes BOnA.xusertype = B.xusertype
Inner Joinsysobjects DOnA.id = D.id
and D.xtype = 'U'
and D.name <> 'dtproperties'
Left Joinsyscomments EonA.cdefault = E.id
Left Joinsys.extended_properties GonA.id = G.major_id
and A.colid = G.minor_id
Left Joinsys.extended_properties FOnD.id=F.major_id and F.minor_id=0--where d.name='BigTable' --如果只查询指定表,加上此条件Order ByA.id,A.colorder

python 代码
#2023-01-29 22:30:35.660
#已通过
from datetime import datetime
import os
import pymssql as pymssql
import xlwtdef getData():connect = pymssql.connect('192.168.121.130', 'sa', 'Aa123456789', 'jiradb')if connect:print("连接成功!")cur = connect.cursor()query = """ SELECTtableName = D.name ,tableIntroduce = isnull(F.value,
''),sort = A.colorder,fieldName = A.name,catogary = B.name,bytes = A.Length,lengths = COLUMNPROPERTY(A.id,
A.name,
'PRECISION'),scales = isnull(COLUMNPROPERTY(A.id,
A.name,
'Scale'),
0),isOrNotNull =
CaseWhen A.isnullable = 1 Then '√'Else ''
End,primarays =
CaseWhen exists(SELECT1FROMsysobjectsWherextype = 'PK'and parent_obj = A.idand name in (SELECTnameFROMsysindexesWHEREindid in(SELECTindidFROMsysindexkeysWHEREid = A.idAND colid = A.colid))) then '√'else ''
end,defauts = isnull(E.Text,
''),annotations = isnull(G.[value],
'')
FROMsyscolumns A
Left Joinsystypes BOnA.xusertype = B.xusertype
Inner Joinsysobjects DOnA.id = D.id
and D.xtype = 'U'
and D.name <> 'dtproperties'
Left Joinsyscomments EonA.cdefault = E.id
Left Joinsys.extended_properties GonA.id = G.major_id
and A.colid = G.minor_id
Left Joinsys.extended_properties FOnD.id=F.major_id and F.minor_id=0--where d.name='BigTable' --如果只查询指定表,加上此条件Order ByA.id,A.colorder """cur.execute(query)data = cur.fetchall() # 元组类型return datadef exportExcel(name):data = getData()myExcel = xlwt.Workbook('encoding=utf-8')# 定义表的宽sheet1 = myExcel.add_sheet(name, cell_overwrite_ok=True)sheet1.col(0).width = 300 * 20sheet1.col(1).width = 400 * 20sheet1.col(2).width = 100 * 20sheet1.col(3).width = 300 * 20sheet1.col(4).width = 256 * 20sheet1.col(5).width = 180 * 20sheet1.col(6).width = 180 * 20sheet1.col(7).width = 100 * 20sheet1.col(8).width = 100 * 20sheet1.col(9).width = 100 * 20sheet1.col(10).width = 180 * 20sheet1.col(11).width = 800 * 20# 设置居中a1 = xlwt.Alignment()a1.horz = 0x02a1.vert = 0x01style = xlwt.XFStyle() # 赋值style为XFStyle为初始化样式style.alignment = a1today = datetime.today() # 获取当前日期,得到一个datetime对象如:(2019, 7, 2, 23, 12, 23, 424000)today_date = datetime.date(today) # 将获取到的datetime对象仅取日期如:2019-7-2items = ['数据表', '表名', '字段序号', '字段', '类型', '占用字节数', '长度', '小数点', '是否为空', '是否为主键','默认值', '注释']for col in range(len(items)):sheet1.write(0, col, items[col])# 合并第二列的name,从content获取第一列数据,[("Choleen","xxx"),()]first_col = []for i in range(len(data)):first_col.append(data[i][0])print("first_col:", first_col)# 去掉重复的列数据,并顺序不变nFirst_col = list(set(first_col))nFirst_col.sort(key=first_col.index)print("nFirst_col:", nFirst_col)row = 1for i in nFirst_col:count = first_col.count(i) # 计算重复的元素个数mergeRow = row + count - 1 # 合并后的上行数,sheet1.write_merge(row, mergeRow, 0, 0, i, style) # 第一列sheet1.write_merge(row, mergeRow, 1, 1, i, style)row = mergeRow + 1 # 从下一行开始写入# 获取data[i]中的第二个元素,循环写入for row in range(len(data)):for col in range(1, len(data[row])):result = data[row][col]str = typeof(result) # 获取类型if str == None: # 不能识别的类型,需要转换result = result.decode('utf-8')sheet1.write(row + 1, col, result, style)fileName = name + '.xls'rootPath = os.path.dirname(os.path.abspath('ExportSqlServer.py')) + '\\'print(rootPath)flag = os.path.exists(rootPath + fileName)if flag:os.remove(rootPath + fileName)myExcel.save(fileName)else:myExcel.save(fileName)def typeof(variate):type = Noneif isinstance(variate, int):type = "int"elif isinstance(variate, str):type = "str"elif isinstance(variate, float):type = "float"elif isinstance(variate, list):type = "list"elif isinstance(variate, tuple):type = "tuple"elif isinstance(variate, dict):type = "dict"elif isinstance(variate, set):type = "set"return typeif __name__ == '__main__':print("这是sqlServer导出的数据字典")# response = chardet.detect(b'\xe7\x94\xa8\xe6\x88\xb7\xe8\xa1\xa8')# print(response)exportExcel("user表")

遇到报错,连接字符串密码当时填写错了
相关文章:
Python导出SqlServerl数据字典为excel
sql代码 SELECTtableName D.name ,tableIntroduce isnull(F.value, ),sort A.colorder,fieldName A.name,catogary B.name,bytes A.Length,lengths COLUMNPROPERTY(A.id, A.name, PRECISION),scales isnull(COLUMNPROPERTY(A.id, A.name, Scale), 0),isOrNotNull Cas…...
PB:DDE服务器函数
1、GetCommandDDE() 功 能:得到DDE客户应用发送的命令。 语 法:GetCommandDDE ( string ) 参 数:string:string类型的变量,用于保存DDE客户应用发送的命令。 返回值:Integer。函数执行成功时返回1,发生错误时返回-1。如果string参数的值为NULL, GetCommandDDE()…...
awk经典实战、正则表达式
目录 1.筛选给定时间范围内的日志 2.统计独立IP 案列 需求 代码 运行结果 3.根据某字段去重 案例 运行结果 4.正则表达式 1)认识正则 2)匹配字符 3)匹配次数 4)位置锚定:定位出现的位置 5)分组…...
Python脚本-时间盲注
BlindBool_get import requests from optparse import OptionParser import threading#存放变量 DBName "" DBTables [] DBColumns [] DBData {} flag You are in #设置重连次数以及将连接改为短连接 #防止因为HTTP连接数过多导致的MAX retries exceeded with …...
面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂
Redis哨兵模式、集群脑裂 哨兵模式哨兵的作用服务状态监控 Redis集群(哨兵模式)脑裂解决办法 哨兵模式 为了保证Redis的高可用,Redis提供了哨兵模式 哨兵的作用 服务状态监控 Redis集群(哨兵模式)脑裂 假设由于网络原…...
el-table那些事
el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑,需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量,并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…...
kubernetes(一)
文章目录 1. k8s架构2. k8s集群搭建 1. k8s架构 2. k8s集群搭建...
计算机网络(6) --- https协议
计算机网络(5) --- http协议_哈里沃克的博客-CSDN博客http协议https://blog.csdn.net/m0_63488627/article/details/132089130?spm1001.2014.3001.5501 目录 1.HTTPS的出现 1.HTTPS协议介绍 2.补充概念 1.加密 1.解释 2.原因 3.加密方式 对称加…...
(三)Node.js - 模块化
1. Node.js中的模块化 Node.js中根据模块来源不同,将模块分为了3大类,分别是: 内置模块:内置模块由Node.js官方提供的,例如fs、path、http等自定义模块:用户创建的每个.js文件,都是自定义模块…...
502 bad gateway报错
代码在本地运行可以正常访问后端接口,部署服务器报错502。直接检查防火墙状态是否开启,先关闭防火墙试一下。如果是防火墙的原因在打开防火墙,开放需要的端口即可。 1、先查看防火墙状态: systemctl status firewalld2、停止防火…...
Flink学习教程
最近因为用到了Flink,所以博主开了《Flink教程》专栏来记录Flink的学习笔记。 【Apache Flink v1.16 中文文档】 【官网 - Apache Flink v1.3 中文文档】 一、基础 参考链接如下: Flink教程(01)- Flink知识图谱Flink教程&…...
flutter开发实战-实现音效soundpool播放音频及控制播放暂停停止设置音量
flutter开发实战-实现音效soundpool播放音频 最近开发过程中遇到低配置设备时候,在Media播放音频时候出现音轨限制问题。所以将部分音频采用音效sound来播放。 一、音效类似iOS中的Sound 在iOS中使用sound来播放mp3音频示例如下 // 通过通知的Sound设置为voip_c…...
Sequence 2023牛客暑期多校训练营6 E
登录—专业IT笔试面试备考平台_牛客网 题目大意:有一长度为n的数组a,有q次询问,每次要求将[l,r]的区间分成k个连续区间,满足每个区间和都是偶数,能满足要求就输出YES 1<n,q<1e5;0<ai<1e10;1<l<r&l…...
【ASP.NET MVC】使用动软(二)(10)
一、添加动软生成工程 按前文添加动态到工程 双击动软 完成新建数据库服务器后 ,需要关闭重新打开 选择简单三层,注意保存位置 注意切换数据库: 生成后拷贝五个文件夹到工程目录 注意目录结构: 添加四个项目到原来的工程&…...
STM32入门学习之独立看门狗(IWDG)
1.STM32的独立看门狗是一个具有独立时钟的片上外设。通常,为了防止程序卡死,可以设置看门狗定时复位。当看看门狗被使能之后,会按初始化时设置的计数值进行计数。当根据计数值计数的倒数时间为0时,便会自动复位程序,即…...
抖音seo矩阵系统源码搭建开发详解
抖音SEO矩阵系统是一个用于提高抖音视频在搜索引擎排名的工具。如果你想开发自己的抖音SEO矩阵系统,以下是详细的步骤: 开发步骤详解: 确定你需要的功能和算法 抖音SEO矩阵系统包含很多功能,比如关键词研究、内容优化、链接建设、…...
2685. 统计完全连通分量的数量;2718. 查询后矩阵的和;1600. 王位继承顺序
2685. 统计完全连通分量的数量 核心思想:枚举所有的连通分量,然后判断这些连通分量是不是完全连通分量,完全连通分量满足边数2e 点数v(v-1)。 2718. 查询后矩阵的和 核心思想:后面的改变更重要,所以我们直接逆向思维…...
SpringBoot统一功能处理(AOP思想实现)(统一用户登录权限验证 / 异常处理 / 数据格式返回)
主要是三个处理: 1、统一用户登录权限验证; 2、统一异常处理; 3、统一数据格式返回。 目录 一、用户登录权限校验 🍅 1、使用拦截器 🎈 1.1自定义拦截器 🎈 1.2 设置自定义拦截器 🎈创建cont…...
git stash 用法
起始 今天在看一个bug,之前一个分支的版本是正常的,在新的分支上上加了很多日志没找到原因,希望回溯到之前的版本,确定下从哪个提交引入的问题,但是还不想把现在的修改提交,也不希望在Git上看到当前修改的…...
生鲜蔬果小程序的完整教程
随着互联网的发展,线上商城成为了人们购物的重要渠道。其中,小程序商城在近年来的发展中,备受关注和青睐。本文将介绍如何使用乔拓云网后台搭建生鲜果蔬配送小程序,并快速上线。 首先,登录乔拓云网后台,进入…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
