【发布时间】:2018-04-02 22:18:18
【问题描述】:
我正在使用下面的代码在 3 个不同的数据库中运行 3 个不同的查询 并尝试将它们导出到单个 Excel 文件中,每个结果都在不同的工作表上(总共 9 个工作表)。
但是当运行下面的代码时,我得到一个只有 3 张纸的文件(每张纸只包含每个数据库上的第一个查询结果)
我使用pyodbc 进行数据库连接和pandas 以处理Excel 写入。
databases = {DB1, DB2, DB3}
queries = {query1, query2, query3}
writer = pd.ExcelWriter('C:\Temp\Output.xlsx')
for database in databases:
cnxn = pyodbc.connect(driver='{SQL Server}',
host=database.server,
database=database.db_name,
trusted_connection=database.trusted_connection,
user=database.user_name,
password=database.password)
cursor = cnxn.cursor()
for q in queries:
cursor.execute(q)
rows = cursor.fetchall()
df = pd.read_sql_query(q, cnxn)
df.to_excel(writer,
sheet_name=str(q.index(q))+"-"+database.name)
writer.save()
【问题讨论】:
-
XML 从何而来?无论如何 - 与其在执行每个查询后编写,为什么不构建所有查询的单个数据框,然后编写?
-
另外——如果你使用
cursor.execute然后rows = cursor.fetchall()——你为什么还要使用pd.read_sql_query(再次执行查询)而不是之前的直接放入 DataFrame 中? -
str(q.index(q))这总是给 0 ,所以你得到表 0_DBNAME -
@JonClements 抱歉,写的是 XML 而不是 Excel。
-
@JonClements 我尝试评论 2,希望 pd.read_sql_query (q, cnxn) 能提供我需要的东西,但在返回它们之前它一直保持空输出