2016-11-16 11 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

相关问题