Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python从SQL数据库到Excel_Python_Sql Server_Excel_Odbc_Xlsxwriter - Fatal编程技术网

用Python从SQL数据库到Excel

用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

我是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 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
的表,那么您将用该值替换它。行对象显然不受支持。支持的类型有:
字符串
数字
公式