comment écrire les résultats d'une procédure stockée dans un file excel avec python

Je suis récemment nouveau sur Python et je travaillais dans un code qui pourrait se connecter à l'une de mes bases de données pour récupérer toutes les lignes et les colonnes, de sorte que je serais capable de contenir ces données dans une list puis de l'écrire sur une Fichier Excel. Voici le code que j'ai écrit:

#create the MSSQL connection with python table_one_connection = pypyodbc.connect(driver="{SQL Server}", server="xxx.xxx.xxx.xxx", uid="you-cant-see-me", pwd="guessme",Trusted_Connection = "No") table_one_connection_results = [] row_table_one = 0 #set the cursor for table_one cursor = table_one_connection.cursor() cursor.execute("[data].[Tableschema].[DEFINED_SP] @start_date='xx-xx-xx', @end_date='xx-xx-xx'") #get all the rows from the SP results = cursor.fetchall() #append the results into a list for index, result in enumerate(results): table_one_connection_results.append(result) #start writing the results into an Excel file results_workbook = xlwt.Workbook() results_sheet = results_workbook.add_sheet("SP values") #insert the list results into the Excel file for index, value in enumerate(table_one_connection_results): results_sheet.write(row_table_one,0,value) row_table_one = row_table_one + 1 #write the workbook results_workbook.save("C:\\Users\\UserX\\Desktop\\E\\output\\export_results.xls") 

Maintenant, le problème vient lorsque le code essaie d'écrire datatables sur le file Excel, l'ordinateur affiche l'erreur suivante:

 Traceback (most recent call last): line 284 in __rich_text_helper raise Exception ("Unexpected data type %r" % type(data)) Exception: Unexpected data type <class 'float'> 

Maintenant, je crains que j'écris datatables dans la colonne 1 (colonne A dans Excel) et j'ai essayé d'itérer chaque élément de list pour les écrire dans des lignes distinctes, mais je crois que ce n'est pas la solution correcte que je désire mais plutôt voudrais voir chaque élément de list séparé dans différentes colonnes et différentes lignes, quelque chose comme ceci:

 column A column B column C value_one value_two value_three 

au lieu de

 column A value_one, value_two, value_three new_value_one new_value_two new_value_three 

Mes principales questions sont les suivantes:

  1. Pourquoi ai-je reçu cette erreur d'exception du type de données inattendue ?
  2. Je souhaite que chaque élément de list soit séparé en différentes colonnes et différentes lignes. Comment puis-je atteindre cet objective? Bonus: Existe-t-il une meilleure approche pour atteindre cet objective sans utiliser de list? Qu'en est-il d'un dictionary? Est-ce possible?

Merci d'avance, veuillez modifier ou commenter ou requestr d'autres détails.

Toutes les réponses sont les bienvenues!

Mettre à jour

Grâce au commentaire de stovfl, j'ai pu déterminer que le directory n'existait pas, alors je viens de le mettre à jour pour une nouvelle valeur. Cela résout la question, mais maintenant, un autre problème s'est posé: quand j'essaie d'écrire dans le classur, il dit que chaque ligne a une erreur, quelque chose comme ceci:

 Error in line 61418 data=('04/05/2017', 'xxxx', 'xxxxx', 'xxxxx', 100.0, 99.03, 99.15, 4.73) 

La nouvelle question est la suivante: pourquoi je ne peux pas écrire dans le classur Excel.

Après quelques tests et solutions de contournement, j'ai trouvé une solution à mon problème.

 #create the MSSQL connection with python table_one_connection = pypyodbc.connect(driver="{SQL Server}", server="xxx.xxx.xxx.xxx", uid="you-cant-see-me", pwd="guessme",Trusted_Connection = "No") #set the cursor for table_one cursor = table_one_connection.cursor() cursor.execute("[data].[Tableschema].[DEFINED_SP] @start_date='xx-xx-xx', @end_date='xx-xx-xx'") #Fetching data cursor.fetchall() #Create the workbook of results print("Generating the workbooks with the database data") cursor_results_workbook = xlwt.Workbook() results_sheet = cursor_results_workbook.add_sheet("SP values") #row counter that you use to move from rows row_counter = 0 #write the data onto the Excel file for index,value in enumerate(cursor): try: #extract from the tuple 'results' the value of each item and store it in every column for all rows results_sheet.write(row_counter, 0, value[0]) results_sheet.write(row_counter, 1, value[1]) results_sheet.write(row_counter, 2, value[2]) results_sheet.write(row_counter, 3, value[3]) results_sheet.write(row_counter, 4, value[4]) except: print("Error in line %s\n data=%s" % (index, value)) row_counter = row_counter + 1 cursor.close() 

Modifiez les éléments suivants pour split la row ssortingng en column values :

 for index, value in enumerate(table_one_connection_results): results_sheet.write(row_table_one,0,value) 

à

 for index, value in enumerate(table_one_connection_results): for col, col_value in enumerate(value.split(',')): try: results_sheet.write(row_table_one, col, col_value) except: print('Error in line %s, column %s\ndata=%s' % (index, col, table_one_connection_results[index]) ) 

Documentation utilisée: xlwt API Reference