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表")

 

遇到报错,连接字符串密码当时填写错了

 

 

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

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

相关文章

Java 监听Mysql binlog

使用 mysql-binlog-connector-java 1. mysql-binlog-connector-java 官网 2. Java代码中&#xff0c;如何监控Mysql的binlog&#xff1f; 前置条件 1. mysql服务器表结构 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 C…

【测试联调】如何在前后端测试联调时优雅的构造异常场景

目录 背景 使用iptables实现 利用iptables丢弃某ip数据包 使用 -L 列出所有规则 IP 连通性 通信 测试 插入一条规则&#xff0c;丢弃此ip 的所有协议请求 列出所有规则 测试 丢弃规则内的IP 连通性 清除 规则列表的 限制 模拟ip进行丢包50%的处理。 mysql proxy 代理…

(亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

最近在进行一个Flask项目的过程中遇到了unresolved reference 包名的问题&#xff0c;在网上找了好久解决方案&#xff0c;并没有一个能让我一步到位解决问题的。 后来&#xff0c;我对该问题和网上的解决方案进行了分析&#xff0c;发现网上大多数都是针对项目同一目录下的py…

【数据库】将excel数据导入mysql数据库

环境&#xff1a;Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件&#xff0c;删除表头行并另存为并更改编码方式&#xff08;由于与数据库的编码不同&#xff0c;会导致导入报错&#xff09; 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载&#xff08;Loading&#xff09;1.2 验证&#xff08;Verification&#xff09;1.3 准备&#xff08;Preparation&#xff09;1.4 解析&#xff08;Resolution&#xff09;1.5 初始化&#xff08;Initialization&#xff09; 二、双亲委派…

LIME(可解释性分析方法)

目录 1.什么是LIME 2.思路 3.LIME在不同任务中的范式&#xff08;待补充&#xff09; 1.什么是LIME 简单理解&#xff1a; 对于分类任务&#xff1a;如下图所示&#xff0c;LIME可以列出分类结果&#xff0c;所依据特征对应给比重。 对于图像分类任务&#xff1a;如下图所示&a…

git 忽略掉不需要的文件

第一步&#xff1a;创建.gitignore文件 touch .gitignore 第二步&#xff1a;使用vi编辑器 输入不需要的文件&#xff0c;或用通配符*来忽视一系列文件 效果&#xff1a;

华为OD机试之报文回路(Java源码)

题目描述 IGMP 协议中响应报文和查询报文&#xff0c;是维系组播通路的两个重要报文&#xff0c;在一条已经建立的组播通路中两个相邻的 HOST 和 ROUTER&#xff0c;ROUTER 会给 HOST 发送查询报文&#xff0c;HOST 收到查询报文后给 ROUTER 回复一个响应报文&#xff0c;以维持…

每日一题——回文链表

回文链表 题目链接 回文结构即字符串正序逆序完全一致&#xff0c;如“1 2 3 4 3 2 1”&#xff0c;那么我们就要想办法同时比较链表头和链表尾的元素&#xff0c;看其是否相等。 下面介绍一种最常用的方法&#xff1a; 思路 如果我们仔细观察回文结构&#xff0c;就会得到一…

差值结构的相互作用能

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A&#xff0c;B中各有3个点&#xff0c;且不重合&#xff0c;统计迭代次数并排序。 其中有10组数据 差值结构 A-B 迭代次数 构造平均列 平均列…

基于 Redux + TypeScript 实现强类型检查和对 Json 的数据清理

基于 Redux TypeScript 实现强类型检查和对 Json 的数据清理 突然像是打通了任督二脉一样就用了 generics 搞定了之前一直用 any 实现的类型…… 关于 Redux 的部分&#xff0c;这里不多赘述&#xff0c;基本的实现都在这里&#xff1a;Redux Toolkit 调用 API 的四种方式 和…

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式&#xff08;不常用&#xff0c;因为要为每一个类配置TransactionProxyFactoryBean&#xff09; 2.2 基于AspectJ的XML方式&#xff08;常用&#xff0c;可配置在某些类下的所有子…