循环多个SQL查询并将输出保存为单个数据帧

时间:2018-08-29 14:14:49

标签: python

我有一个python脚本,试图在其中循环遍历多个sql查询,将这些查询的输出作为简单的count(*)并将它们连接到一个数据帧中。

virtualenvwrapper.django

2 个答案:

答案 0 :(得分:1)

这实际上只是基本的Python。您的代码不清楚,因为您在此处未正确缩进,但是无论如何它都无法工作,因为concatenated_datafunction范围内声明,并且在函数退出时丢失。它的效果无法持久。您需要学习功能如何工作。您可以在Python教程中找到https://docs.python.org/3/tutorial/controlflow.html#defining-functions。同时,这里大致是如何解决将代码包装到函数中而烦恼的代码:

conn = ...

query_paths = ['test1.sql', 'test2.sql', 'test3.sql']

query_results = []

for query_path in query_paths:

    with open(query_path) as file:
        query = file.read()

    query_results.append(pd.read_sql_query(query, conn))

result = pd.concat(query_results)

答案 1 :(得分:0)

这是一个粗略的主意,我们该怎么做。如果您更新代码。我可以更新我的答案。

import pandas as pd


sqls = ['test1.sql','test2.sql','test3.sql']

def func(query):
    conn = ...
    df = pd.DataFrame()
    if len(df) == 0:
        df = pd.read_sql(query_string,conn)
    else:
        df_temp = df.copy()
        temp = pd.read_sql(query_string,conn) 
        df = pd.concat([df, df_temp], ignore_index=True)
    return df

for query in sqls:
    func(query)