2016-11-16 15 views
1

我是Python新手。我已經通過odbc連接成功連接到我的SQL數據庫,並從表格中提取數據。然後如何將這些數據導入到Excel工作簿中。最好使用xlsxwriter模塊。從SQL數據庫到使用Python的Excel

import pyodbc 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSERVER;PORT=XX;DATABASE=dbname;UID=sa;PWD=##') 
cursor = cnxn.cursor() 
cursor.execute("select * from T1 where C2 not like '%text%'") 
for row in cursor: 
     print row.1, row.2, row3 

cursor.close() 
cnxn.close() 

回答

2

pandas是最簡單的賭注。下面是使用SQLite作爲數據庫後端的例子:

In [38]: import pandas as pd 

In [39]: df 
Out[39]: 
      0   1   2   3   4 
0 0.092719 0.664147 0.677834 0.605845 0.569223 
1 0.656272 0.321661 0.294219 0.818676 0.010610 
2 0.041692 0.721683 0.163525 0.175113 0.580234 
3 0.852775 0.106076 0.049080 0.649362 0.265763 
4 0.481842 0.942276 0.462951 0.386705 0.205302 

In [40]: df.to_sql("tbl", sqlite3.connect("test.sqlite"), index=False) 

In [41]: new_df = pd.read_sql("select * from tbl", sqlite3.connect("test.sqlite")) 

In [42]: new_df 
Out[42]: 
      0   1   2   3   4 
0 0.092719 0.664147 0.677834 0.605845 0.569223 
1 0.656272 0.321661 0.294219 0.818676 0.010610 
2 0.041692 0.721683 0.163525 0.175113 0.580234 
3 0.852775 0.106076 0.049080 0.649362 0.265763 
4 0.481842 0.942276 0.462951 0.386705 0.205302 

In [43]: new_df.to_excel("out.xlsx") 

線41和43是主要的,並且這導致在當前文件夾名爲out.xlsx單個片材的Excel文件:

1

由於您已經擁有了您的數據,因此您的問題似乎只是如何將數據導入到Excel中。假設您有一個名爲rows的對象中的數據,它是結果行的列表。

import xlsxwriter 
workbook = xlsxwriter.Workbook('YourResults.xlsx') 
worksheet = workbook.add_worksheet() 

row = 0 
col = 0 

for row_data in rows: 
    worksheet.write(row, col, row_data.1) 
    worksheet.write(row, col+1, row_data.2) 
    worksheet.write(row, col+2, row_data.3) 
    row += 1 

workbook.close() 

這應該將數據行寫入電子表格。您可以在這裏查看xlsxwriter教程:https://xlsxwriter.readthedocs.io/tutorial01.html

除此之外,您還可以通過ADO(使用COM)訪問SQL和Excel,但是,如果您剛剛開始使用Python,那可能會更具挑戰性。如果您有興趣在稍後查看,請點擊這裏查看python中的ADO:http://mayukhbose.com/python/ado/index.php

1

如果Pandas包可用,您可以輕鬆地將DataFrame轉儲到Excel電子表格。格式也可以訪問。您需要通過將行附加到列表中來獲取數據到DataFrame中(不知道pyodbc是如何工作的)。例如:

import pandas as pd 

data = [] 
... 
for rows in cursor: 
    for row in rows: 
     data.append(row) 

df = pd.DataFrame(data) 

然後轉儲到Excel。

def df_to_excel(path,data_frame): 
    writer = pd.ExcelWriter(path, engine='xlsxwriter') 
    data_frame.to_excel(writer, index=False, sheet_name='SHEET0') # sheet 0 
    writer.save() 
1
import xlsxwriter 

workbook = xlsxwriter.Workbook('your_excel.xlsx') 
worksheet = workbook.add_worksheet() 

第一個版本寫入在每列中依次一個值(即row)。

for index, row in enumerate(cursor): 
    worksheet.write(0, index, row) 
workbook.close() 

第二個版本按順序在每一行中寫入一個值(即row)。

for index, row in enumerate(cursor): 
    worksheet.write(index, 0, row) 
workbook.close() 
+0

嗨,當我嘗試運行此我得到以下錯誤:類型錯誤:不支持的類型<類型「pyodbc.Row」>在寫() – Erinna00

+0

使用'row.column'其中'column'是名錶格中的列。所以如果你有一個帶有'username','password'的表,那麼你將用這個值替換它。 Row對象顯然不受支持。支持的類型有:字符串,數字,公式,無。 https://xlsxwriter.readthedocs.io/worksheet.html#write – ipinak

相關問題