Python导出SqlServerl数据字典为excel

这篇具有很好参考价值的文章主要介绍了Python导出SqlServerl数据字典为excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sql代码

SELECT
	tableName = 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 =
Case
	When A.isnullable = 1 Then '√'
	Else ''
End,
            primarays =
Case
	When exists(
	SELECT
		1
	FROM
		sysobjects
	Where
		xtype = 'PK'
		and parent_obj = A.id
		and name in (
		SELECT
			name
		FROM
			sysindexes
		WHERE
			indid in(
			SELECT
				indid
			FROM
				sysindexkeys
			WHERE
				id = A.id
				AND colid = A.colid))) then '√'
	else ''
end,
        defauts = isnull(E.Text,
''),
            annotations = isnull(G.[value],
'')
FROM
        syscolumns A
Left Join
        systypes B
    On
        A.xusertype = B.xusertype
Inner Join
        sysobjects D
        On
        A.id = D.id
and D.xtype = 'U'
and D.name <> 'dtproperties'
Left Join
        syscomments E
 on
        A.cdefault = E.id
Left Join
    sys.extended_properties G
    on
        A.id = G.major_id
and A.colid = G.minor_id
Left Join
    sys.extended_properties F
    On
        D.id=F.major_id and F.minor_id=0
        --where d.name='BigTable'    --如果只查询指定表,加上此条件
    Order By
        A.id,A.colorder 

Python导出SqlServerl数据字典为excel,python,数据库,sql

 python 代码

#2023-01-29 22:30:35.660
#已通过
from datetime import datetime
import os
import pymssql as pymssql
import xlwt


def getData():
    connect = pymssql.connect('192.168.121.130', 'sa', 'Aa123456789', 'jiradb')
    if connect:
            print("连接成功!")
    cur = connect.cursor()
    query = """ SELECT
	tableName = 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 =
Case
	When A.isnullable = 1 Then '√'
	Else ''
End,
            primarays =
Case
	When exists(
	SELECT
		1
	FROM
		sysobjects
	Where
		xtype = 'PK'
		and parent_obj = A.id
		and name in (
		SELECT
			name
		FROM
			sysindexes
		WHERE
			indid in(
			SELECT
				indid
			FROM
				sysindexkeys
			WHERE
				id = A.id
				AND colid = A.colid))) then '√'
	else ''
end,
        defauts = isnull(E.Text,
''),
            annotations = isnull(G.[value],
'')
FROM
        syscolumns A
Left Join
        systypes B
    On
        A.xusertype = B.xusertype
Inner Join
        sysobjects D
        On
        A.id = D.id
and D.xtype = 'U'
and D.name <> 'dtproperties'
Left Join
        syscomments E
 on
        A.cdefault = E.id
Left Join
    sys.extended_properties G
    on
        A.id = G.major_id
and A.colid = G.minor_id
Left Join
    sys.extended_properties F
    On
        D.id=F.major_id and F.minor_id=0
        --where d.name='BigTable'    --如果只查询指定表,加上此条件
    Order By
        A.id,A.colorder """

    cur.execute(query)
    data = cur.fetchall()  # 元组类型
    return data


def exportExcel(name):
    data = getData()
    myExcel = xlwt.Workbook('encoding=utf-8')
    # 定义表的宽
    sheet1 = myExcel.add_sheet(name, cell_overwrite_ok=True)
    sheet1.col(0).width = 300 * 20
    sheet1.col(1).width = 400 * 20
    sheet1.col(2).width = 100 * 20
    sheet1.col(3).width = 300 * 20
    sheet1.col(4).width = 256 * 20
    sheet1.col(5).width = 180 * 20
    sheet1.col(6).width = 180 * 20
    sheet1.col(7).width = 100 * 20
    sheet1.col(8).width = 100 * 20
    sheet1.col(9).width = 100 * 20
    sheet1.col(10).width = 180 * 20
    sheet1.col(11).width = 800 * 20

    # 设置居中
    a1 = xlwt.Alignment()
    a1.horz = 0x02
    a1.vert = 0x01
    style = xlwt.XFStyle()  # 赋值style为XFStyle为初始化样式
    style.alignment = a1

    today = datetime.today(
    )  # 获取当前日期,得到一个datetime对象如:(2019, 7, 2, 23, 12, 23, 424000)
    today_date = datetime.date(today)  # 将获取到的datetime对象仅取日期如:2019-7-2
    items = [
        '数据表', '表名', '字段序号', '字段', '类型', '占用字节数', '长度', '小数点', '是否为空', '是否为主键',
        '默认值', '注释'
    ]
    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 = 1
    for 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 = None
    if 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 type


if __name__ == '__main__':
    print("这是sqlServer导出的数据字典")
    # response = chardet.detect(b'\xe7\x94\xa8\xe6\x88\xb7\xe8\xa1\xa8')
    # print(response)
    exportExcel("user表")

Python导出SqlServerl数据字典为excel,python,数据库,sql

Python导出SqlServerl数据字典为excel,python,数据库,sql

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

Python导出SqlServerl数据字典为excel,python,数据库,sql文章来源地址https://www.toymoban.com/news/detail-631024.html

到了这里,关于Python导出SqlServerl数据字典为excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依@Excel注解自动获取导出字段,字典解析

    若依系统中实体类导出字段使用了 @Execl 如不是若依系统 最后附有excel接口 普通导出: @Excel (name = \\\"单位\\\") private String unit; 带字典解析导出: @Excel (name = \\\"状态\\\", dictType = \\\"sys_true_false\\\") private Integer attributeCategory; 系统后台字典配置: 新增的字典也会存在redis缓存中(直接查询缓存

    2024年02月11日
    浏览(73)
  • 【Python数据类型-字典】------- PYTHON基础12

    字典(Dictionary)指一种可变的容器,这个容器可以存储任意类型的数据。 字典里的每个元素为一个键值对, 键值对 格式如下: key : value key 被称为键值,它在字典中的值是唯一的(不能重复)。 value 被称为值,它在字典中可以不唯一(可以重复)。 每个键值对用英文冒号

    2024年02月04日
    浏览(49)
  • python数据类型-字典

    1)字典中的元素时一个个键值对,键和值之间用冒号:分隔,键值对元素之间用逗号分隔,格式:d = {key1 : value1, key2 : value2 } 2)字典中的键是唯一的,值可以重复 注**:键不可变,因此键可以是数字、字符串或元素,但不能为列表** 1)通过在{}放键值对 2) 通过dict函数,入参

    2024年02月21日
    浏览(32)
  • 【python基础】复杂数据类型-字典(嵌套)

    有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为 嵌套 。我们可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典。 我们可以把一个人的信息放在字典中,但是多个人的信息我们无法放在同一个字典中,所以就需要字典列表。 其语

    2024年02月08日
    浏览(38)
  • Python的数据类型——字典(dict)

    目录 1. Python的数据类型 2. 什么是字典 3. 字典存储的数据 4. 字典的语法  5. 新建字典 (1) 用{ }新建一个空字典

    2024年02月06日
    浏览(37)
  • 【python基础】复杂数据类型-字典(遍历)

    一个字典可能只包含几个键值对,也可能包含数百万个键值对,所以Python支持字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键值对、键或值。 其语法格式: 比如遍历一个人的信息,编写程序如下所示: 这里,我们给键起了一个

    2024年02月08日
    浏览(48)
  • 使用 Python 字典向 SQLite 插入数据

    将Python字典数据插入SQLite数据库中其实有很多好处,例如使用字典的结构可以简化插入数据的代码,使其更加紧凑和易于理解。这降低了代码的复杂性,并使代码更易于维护。那么在我们日常使用中会有哪些问题呢?一起看看我是如何解决的吧。 问题背景 我正在使用 Python

    2024年03月12日
    浏览(78)
  • Python使用Pyside2和Qt Designer实现接口数据查询mainwindow-tablewidget和EXCEL导出功能,并生成EXE可执行文件直接调用.ui文件和生成py调用都有-初学

    通过Pyside2库调用QT Designer的UI文件,直接调用.ui文件和将.ui文件转换为.pt文件进行调用,调用测试成功生成exe文件 可以直接在终端调用 参考:https://blog.csdn.net/qq_44940689/article/details/123913832 直接在终端中运行 -F 只会生成单独的一个exe文件 -w 是双击exe不会打开黑色窗口,可以试

    2024年02月04日
    浏览(49)
  • 【Python】基础数据结构:列表——元组——字典——集合

    Python提供了多种内置的数据结构,包括列表( List )、元组( Tuple )和字典( Dictionary )。这些数据结构在Python编程中都有着广泛的应用,但它们各有特点和适用场景。 列表是一种有序的集合,可以随时添加和删除其中的元素。列表是可变的,也就是说,你可以修改列表的

    2024年02月10日
    浏览(51)
  • 【python基础】复杂数据类型-字典(增删改查)

    字典,是另外一种复杂的数据类型,相较于列表,字典可以将相关信息关联起来。比如说一个人的信息有名字、年龄、性别等,如果用列表存储的话,不能表示他们之间是相关联的,而字典可以,字典是一个或多个键值对组成 列表的标志是[ ], 字典的标志是{ } ,其语法格式:

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包