我有一个python脚本,试图在其中循环遍历多个sql查询,将这些查询的输出作为简单的count(*)并将它们连接到一个数据帧中。
virtualenvwrapper.django
答案 0 :(得分:1)
这实际上只是基本的Python。您的代码不清楚,因为您在此处未正确缩进,但是无论如何它都无法工作,因为concatenated_data
在function
范围内声明,并且在函数退出时丢失。它的效果无法持久。您需要学习功能如何工作。您可以在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)