用Python从SQL数据库到Excel
我是Python新手。我已经通过odbc连接成功地连接到SQL数据库,并且正在从表中提取数据。然后如何将该数据输入Excel工作簿中。最好使用xlsxwriter模块用Python从SQL数据库到Excel,python,sql-server,excel,odbc,xlsxwriter,Python,Sql Server,Excel,Odbc,Xlsxwriter,我是Python新手。我已经通过odbc连接成功地连接到SQL数据库,并且正在从表中提取数据。然后如何将该数据输入Excel工作簿中。最好使用xlsxwriter模块 import pyodbc cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSERVER;PORT=XX;DATABASE=dbname;UID=sa;PWD=##') cursor = cnxn.cursor() cursor.execute("select * from
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()
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文档。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文档。既然您已经有了数据,您的问题似乎只是如何将数据输入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教程:
顺便说一句,您也可以通过ADO(使用COM)访问SQL和Excel,但是,如果您刚刚开始使用Python,这可能会有点挑战性。如果您有兴趣稍后再看,这里有一个python中ADO的入门教程:既然您已经有了数据,那么您的问题似乎只是如何将数据导入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教程:
顺便说一句,您也可以通过ADO(使用COM)访问SQL和Excel,但是,如果您刚刚开始使用Python,这可能会有点挑战性。如果您有兴趣稍后再看,这里有一个python中ADO的入门教程:如果您可以使用该软件包,您可以轻松地将数据帧转储到Excel电子表格中。格式也可以访问。您需要通过在列表中追加行(不确定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()
如果您可以使用该软件包,则可以轻松地将数据框转储到Excel电子表格中。格式也可以访问。您需要通过在列表中追加行(不确定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()
第一个版本在每列中顺序写入一个值(即行
)
for index, row in enumerate(cursor):
worksheet.write(0, index, row)
workbook.close()
for index, row in enumerate(cursor):
worksheet.write(index, 0, row)
workbook.close()
第二个版本在每行中顺序写入一个值(即行
)
for index, row in enumerate(cursor):
worksheet.write(0, index, row)
workbook.close()
for index, row in enumerate(cursor):
worksheet.write(index, 0, row)
workbook.close()
第一个版本在每列中顺序写入一个值(即行
)
for index, row in enumerate(cursor):
worksheet.write(0, index, row)
workbook.close()
for index, row in enumerate(cursor):
worksheet.write(index, 0, row)
workbook.close()
第二个版本在每行中顺序写入一个值(即行
)
for index, row in enumerate(cursor):
worksheet.write(0, index, row)
workbook.close()
for index, row in enumerate(cursor):
worksheet.write(index, 0, row)
workbook.close()
您好,当我尝试运行此操作时,出现以下错误:TypeError:write()中不支持的类型使用
row.column
其中column
是表中列的名称。因此,如果您有一个列为username
,password
的表,那么您将用该值替换它。行对象显然不受支持。支持的类型有:字符串
,数字
,公式
,无
。您好,当我尝试运行此操作时,出现以下错误:TypeError:write()中不支持的类型使用row.column
其中column
是表中列的名称。因此,如果您有一个列为username
,password
的表,那么您将用该值替换它。行对象显然不受支持。支持的类型有:字符串
,数字
,公式
,无
。