2016-07-28 15 views
7

Kann read_sql Abfrage ein SQL-Skript mit mehreren Select-Anweisungen behandeln?Pandas read_sql Abfrage mit mehreren Auswahlmöglichkeiten

Ich habe eine MSSQL-Abfrage, die verschiedene Aufgaben ausführt, aber ich möchte nicht für jeden Fall eine individuelle Abfrage schreiben müssen. Ich möchte nur die eine Abfrage schreiben und die mehreren Tabellen einlesen.

Ich möchte die mehrere Abfragen im selben Skript, weil die Abfragen verwandt sind, und es das Aktualisieren des Skripts erleichtert.

Zum Beispiel:

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...) 

, die mit zwei separaten Abfrageergebnissen führen.

Der nachfolgende Python-Code ist:

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() 

Nur die erste Tabelle aus der Abfrage in gebracht wird

Gibt es trotzdem kann ich in beiden Abfrageergebnissen ziehen (vielleicht mit einem Wörterbuch) das wird. verhindern, dass ich die Abfrage in mehrere Skripte trennen muss.

+0

Wie möchten Sie unterschiedliche Gruppen von Spalten in einem Datenrahmen haben? – MaxU

+0

Ich hatte gehofft, dass es eine Möglichkeit gibt, ein Wörterbuch mit allen Datenrahmen zu erstellen. –

+0

Was meinen Sie mit "in mehrere Skripte"? –

Antwort

2

Sie können folgendes tun:

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("---") 

Jetzt können Sie jede Tabelle abfragen und concat das Ergebnis:

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

Eine weitere Option ist UNION auf die beiden Ergebnisse zu verwenden, dh zu tun das Concat in SQL.

+0

Die .split-Methode funktioniert hier besser für mich, da die beiden Abfragen nicht verwandt sind (aber ähnliche Ableitungen teilen). Vielen Dank! –

Verwandte Themen