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表")
遇到报错,连接字符串密码当时填写错了