2016-07-28 90 views
7

可以read_sql查詢處理與多個select語句的SQL腳本?熊貓read_sql與多個選擇查詢

我有一個MSSQL查詢執行不同的任務,但我不想爲每個案件編寫單獨的查詢。我想寫一個查詢並拉入多個表。

我想在同一個腳本中進行多個查詢,因爲這些查詢是相關的,並且它使得腳本更容易更新。

例如:

SELECT ColumnX_1, ColumnX_2, ColumnX_3 

FROM Table_X 
INNER JOIN (Etc etc...) 

---------------------- 
SELECT ColumnY_1, ColumnY_2, ColumnY_3 

FROM Table_Y 
INNER JOIN (Etc etc...) 

這會導致兩個不同的查詢結果。

隨後的Python代碼是:

scriptFile = open('.../SQL Queries/SQLScript.sql','r') 
script = scriptFile.read() 
engine = sqlalchemy.create_engine("mssql+pyodbc://UserName:[email protected]") 
connection = engine.connect() 

df = pd.read_sql_query(script,connection) 
connection.close() 

只有從查詢中第一個表中帶來

有反正我可以在這兩個查詢結果拉(也許用字典)即會。阻止我不必將查詢分解爲多個腳本。

+0

你想如何在一個數據框中有兩組不同的列? – MaxU

+0

我希望有一種方法可以創建一個包含所有數據幀的字典。 –

+0

「多個腳本」是什麼意思? –

回答

2

你可以做到以下幾點:

queries = """ 
SELECT ColumnX_1, ColumnX_2, ColumnX_3 

FROM Table_X 
INNER JOIN (Etc etc...) 
--- 
SELECT ColumnY_1, ColumnY_2, ColumnY_3 

FROM Table_Y 
INNER JOIN (Etc etc...) 
""".split("---") 

現在,您可以查詢每個表和CONCAT結果:

df = pd.concat([pd.read_sql_query(q, connection) for q in queries]) 

另一種選擇是使用UNION的兩個結果,即做SQL中的concat。

+0

這裏的.split方法對我更好,因爲這兩個查詢是無關的(但共享類似的派生)。謝謝! –