使用Python在单独的工作表excel中提取数据

Posted

技术标签:

【中文标题】使用Python在单独的工作表excel中提取数据【英文标题】:Extracting data in separate sheet excel using Python 【发布时间】:2017-03-21 17:11:08 【问题描述】:

我想编写一个 python 脚本,我可以从中执行多个 sql 查询,并且该查询的输出保存在 excel 中。 假设我有 4 个 sql 查询,即 Script1、Script2、Script3 和 Script4,我想将生成的 Excel 工作簿保存在 E:\Test 中,在该工作簿中 sheet1 包含 Script1 输出,sheet2 包含 Script2 输出,sheet3 包含 Script3 输出,依此类推.我写了一个查询,但它只适用于一个脚本。 通过使用这个脚本,我可以生成带有测试名称的 excel 工作表,但是我如何运行剩余的脚本,以便它们的输出将显示在同一工作簿的其他工作表中 请帮忙

import psycopg2
import sys
import pprint
import pandas as pd
import os
import openpyxl.cell

COMMASPACE = ', '
def main():
    conn_string = "dbname='abc' user='qwerty' host='pqr' password='******' port='1234'"

    script1 = """
select * From something1    
"""
script2 = """
select * From something2    
"""
script3 = """
    select * From something3    
    """
script4 = """
    select * From something4    
    """
    pprint.pprint ('Making connection to the Database...')    
    con1 = psycopg2.connect(conn_string)
    cur = con1.cursor()
    pprint.pprint ('Execution Start')
    cur.execute(script) 
    if not cur.rowcount:
        pprint.pprint ('Oops! Error Occured')
    else:
        columns = [desc[0] for desc in cur.description]
        data = cur.fetchall()
        df = pd.DataFrame(list(data), columns=columns)
        df.columns = map(str.upper, df.columns)
        writer = pd.ExcelWriter('E:\\Test.xlsx')
        df.to_excel(writer, sheet_name='Sheet1')
        def hide_column(ws, column_id):
            if isinstance(column_id, int):
                assert column_id >= 1, "Column numbers must be 1 or greater"
                column_id = openpyxl.cell.get_column_letter(column_id)
            column_dimension = ws.column_dimensions[column_id]
            column_dimension.hidden = True
        writer.save()
    print ("END of extraction")    
if __name__ == "__main__":
    main()

【问题讨论】:

【参考方案1】:

尝试在 Sql Alchemy 中使用 pandas read_sql

from openpyxl import load_workbook
from sqlalchemy import create_engine
import pandas as pd

# Parameters for SQL Alchemy
ServerName = "your_Server_Name"
Database = "Your_Database"
Driver = "Your_Driver"

# Create the connection
engine = create_engine('mssql+pyodbc://' + ServerName + '/' + Database + "?" + Driver)

# reading in the dataframes
df1 = pd.read_sql_query("select * from somewhere", engine)
df2 = pd.read_sql_query("select * from somewhere_else", engine)

# Using openpyxl to write to excel sheets
file = 'Your_file_path_Here'
book = load_workbook(file)
writer = pd.ExcelWriter(file, engine='openpyxl')
writer.book = book

# now start writing them to sheets
df1.to_excel(writer, index=None, sheet_name='SQL1')
df1.to_excel(writer, index=None, sheet_name='SQL2')   

【讨论】:

嗨 MattR,我正在使用 Redshift 数据库,如何在没有用户名和密码的情况下连接?我无法建立连接。 @AquilAbbas,查看this module。诚然,我以前从未使用过红移。但是如果代码太难破解,你也可以在 redshift 中创建 CSV 文件,然后在 pandas 中读取它们。 或 look here 下载驱动程序以使其正常工作。或者跳过 SQL Alchemy 并检查 this link。

以上是关于使用Python在单独的工作表excel中提取数据的主要内容,如果未能解决你的问题,请参考以下文章

怎么可以把EXCEL中多个表格单独提取出来

从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表

使用 Python 提取和合并 Excel 数据

excel 如何从一个工作表提取出所有我要的数据到另一个工作表

VBA中的Excel过滤和复制

如何从一个工作表内的多个提取数据记录到另一个工作表中,并在数据后面加一个分隔标记。