2016-07-28 8 views
7

Czy zapytanie read_sql obsługuje skrypt sql z wieloma instrukcjami wyboru?Pandas query_sql query with multiple selects

Mam kwerendę MSSQL, który wykonuje różne zadania, ale nie chcę, aby napisać indywidualne zapytanie dla każdego przypadku. Chciałbym napisać tylko jedno zapytanie i pobrać wiele tabel.

Chcę, aby wiele kwerend w tym samym skrypcie, ponieważ kwerend są powiązane i ułatwia aktualizowanie skryptu.

Na przykład:

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

Która prowadzi do dwóch odrębnych wyników zapytania. tam

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

Tylko pierwsza tabela z kwerendy doprowadza w

Czy mimo to mogę ciągnąć w obu wynikach zapytania (być może ze słownikiem), który będzie:

Kolejny kod Pythona. uniemożliwić mi oddzielenie zapytania na wiele skryptów.

+0

Jak chcesz holować różne zestawy kolumn w jednej ramce danych? – MaxU

+0

Miałem nadzieję, że istnieje sposób na stworzenie słownika ze wszystkimi ramkami danych w środku. –

+0

Co masz na myśli mówiąc "do wielu skryptów"? –

Odpowiedz

2

Można wykonać następujące czynności:

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

Teraz można wyszukać każdy stół i concat Rezultat:

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

Inną opcją jest użycie unijnego na dwóch wyników tj zrobić konkat w SQL.

+0

Metoda .split działa lepiej dla mnie tutaj, ponieważ dwa zapytania nie są powiązane (ale mają podobne pochodne). Dzięki! –