Define tres métodos
1. Definir un método de adquisición de datos getData ()
2. Definir una tabla de Excel exportación método exportSqlServer ()
Definir una typeof tipo de adquisición () método se utiliza como una consulta de datos fuera identificado
A continuación se muestra el código directamente
fecha y hora de fecha y hora de importación de importación OS Importación pymssql AS pymssql importación xlwt DEF la getData (): Conectar = pymssql.connect (Host, 'SA', contraseñas, nombre de base de datos); CUR = connect.cursor (); query = '' ' SELECT nombreTabla = d.name, # fusioné celular se combina en una mesa de repetir aquí, si la estructura final cuando, no se puede combinar con el caso, estar mal tableIntroduce = ISNULL (F.value, ''), Ordenar = A.colorder , la fieldName = a.name, catogary = b.name, bytes = a.length, longitudes = la COLUMNPROPERTY (A.id, a.name, 'el PRECISION'), Scales = isnull (la COLUMNPROPERTY (A.id, a.name, 'Escala'), 0), isOrNotNull = caso cuando A.isnullable = 1 Entonces '√'Else '' End, syscomments E primarays = caso cuando existe (SELECCIONAR 1 DE sysobjects Dónde xtype = 'PK' y parent_obj = A.id y el nombre de ( nombre SELECT FROM sysindexes DONDE indid en (SELECT indid DE sysindexkeys donde id = A.id Y colid = A.colid ))) luego '√' más '' final, defauts = isnull (E.Text, ''), anotaciones = isnull (G. [valor], '') DE syscolumns Una combinación izquierda systypes B En A.xusertype = B .xusertype combinación interna sysobjects D en a.id = D.id y D.xtype = 'U' y D.name <> 'dtproperties' combinación izquierda en A.cdefault = E.id combinación izquierda sys.extended_properties G EN A.id = G.major_id y A.colid G.minor_id = Izquierda la unión sys.extended_properties F. On D.id F.minor_id = 0 y = F.major_id --donde d.name = 'Información de Pedido' - aunque sólo consulta la tabla especificada, añadir esta condición la Orden Por A.id, A.colorder '' ' cur.execute (consulta) de datos = cur.fetchall () # tuplas retorno de datos DEF exportExcel (nombre): datos = el getData () MyExcel = xlwt.Workbook ( 'encoding = utf -8') de ancho tabla de definición # Sheet1 = myExcel.add_sheet (nombre, cell_overwrite_ok = True) sheet1.col (0) = 300 * 20 es .width sheet1.col (. 1). = 400 * 20 es ancho sheet1.col (2) = 100 * 20 es .width sheet1.col (. 3) * 300 = 20 es .width sheet1.col (. 4) = 256 * 20 es .width sheet1.col (. 5) = 180 [* .width 20 es sheet1.col (. 6) 20 es .width * = 180 [ Sheet1. COL (. 7) * 100 = 20 es .width sheet1.col (. 8) * 100 = 20 es .width sheet1.col (. 9) * 100 = 20 es .width sheet1.col (10) = 180 [* .width 20 es sheet1.col ( . 11) * 800 = 20 es .width # centralmente dispuesta A1 = xlwt.Alignment () a1.horz = 0x02 a1.vert = 0x01 style = xlwt.XFStyle () # estilo se asigna al patrón de inicialización XFStyle style.alignment = A1 Hoy = datetime.today () # obtener la fecha actual, obtenida como una fecha y hora objetos: (2019 ,. 7, 2, 23 es decir, 12 es decir, 23 es, 424000) today_date = datetime.date (hoy) # los objetos de fecha y hora fecha de adquisición toman sólo como : 02/07/2019 items = [ 'tabla de datos', 'tabla', 'campo ID', 'campo', 'tipo', 'número de bytes ocupados '' longitud '' punto decimal '' está vacía ''Si la clave principal '' por defecto '' Nota '] COL en el rango de (LEN (artículos)): sheet1.write (0, COL, artículos [COL]) # nombre combinado en la segunda columna, la primera columna de los datos adquiridos a partir del contenido, [( "Choleen", "XXX") , ()] first_col = [] for i in range (len (datos)): first_col.append (datos [I] [0]) Imprimir ( "first_col:", first_col) los datos de columna duplicados # elimina, y el orden no es variables Lista nFirst_col = (SET (first_col)) nFirst_col.sort (clave = first_col.index) Imprimir ( "nFirst_col:", nFirst_col) Fila = 1. # datos adquiridos [i] del segundo elemento, el ciclo de escritura para la fila en el rango (lEN (datos)): para I en nFirst_col: COUNT = first_col.count (i) # Número de cálculo elemento repetido MergeRow = fila + count - el número de enlace ascendente combinada # 1, sheet1.write_merge (fila, MergeRow, 0, 0, i, estilo) # primera columna sheet1.write_merge (fila, MergeRow ,. 1 ,. 1, I, estilo) Fila MergeRow = # +. 1 se escribe comenzando a partir de una línea siguiente para col en el rango de (1, Len (datos [fila])): resultado = datos [fila] [col] str = typeof (resultado) #获取类型 si str == Ninguno: #不能识别的类型,需要转换 resultado = result.decode ( 'utf-8') sheet1.write (fila + 1, col, resultado, estilo) filename = nombre + '.xls' RootPath = os.path.dirname (os.path.abspath (' ExportSqlServer.py ')) + '\\' impresión (ROOTPATH) flag = os.path.exists (ROOTPATH + nombre del archivo) si la bandera: os.remove (ROOTPATH + nombre del archivo) myExcel.save (nombre del archivo) más: myExcel.save (nombre del archivo) def typeof (variate): type = Ninguno si isinstance (variate, int): tipo = "int" elif isinstance (variate, str): type = "str" elif isinstance (variate, float): type = "flotar" elif isinstance (variate, lista): type = "lista" elif isinstance (variate, tupla): type = "tupla" elif isinstance (variate, dict): type = "dict" elif isinstance (variate, set): type = "conjunto" tipo de retorno , si __name__ == '__main__': print ("Esta es SQLserver exportó diccionario de datos "); # = respuesta chardet.detect (b '\ XE7 \ x94 \ xa8 \ XE6 \ x88 \ xb7 \ XE8 \ xa1 \ xa8') # De impresión (respuesta) exportExcel ( "usuario表")
Apareció, chino ilegible en el proceso de escribir código. python3 no convertirá automáticamente Unicode, nos fijamos en el proceso de conversión:
UTF-8 / GBK - "decodificar la decodificación -" el Unicode el Unicode - "codificar codificación -" GBK / UTF-8
El código aquí es Unicode, para ser convertido a texto sin formato, es necesario método de decodificación de formato Unicode sólo puede ser, si int, str tipos de errores se
Plaintext - encode - "Unicode -" gbk , UTF-8 expresamente "- decode - Unicode" - gbk , UTF-8
así, por lo que puede, para completar la operación.