2016-07-28 17 views
7

Truy vấn read_sql có thể xử lý một tập lệnh sql với nhiều câu lệnh chọn không?Truy vấn đọc trên truy vấn Pandas với nhiều lựa chọn

Tôi có một truy vấn MSSQL đang thực hiện các tác vụ khác nhau, nhưng tôi không muốn phải viết một truy vấn riêng lẻ cho từng trường hợp. Tôi muốn viết chỉ một truy vấn và kéo nhiều bảng.

Tôi muốn có nhiều truy vấn trong cùng một tập lệnh vì các truy vấn có liên quan và việc cập nhật tập lệnh dễ dàng hơn.

Ví dụ:

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

Điều này dẫn đến hai kết quả truy vấn riêng biệt.

Mã python tiếp theo là:

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

Chỉ bảng đầu tiên từ truy vấn được đưa vào

Có anyway tôi có thể kéo trong cả hai kết quả truy vấn (có thể với một cuốn từ điển) mà sẽ. ngăn không cho tôi phải tách truy vấn thành nhiều tập lệnh.

+0

làm cách nào bạn muốn có các bộ cột khác nhau trong một khung dữ liệu? – MaxU

+0

Tôi đã hy vọng có một cách để tạo một từ điển với tất cả các khung dữ liệu bên trong. –

+0

Bạn có ý nghĩa gì bởi "thành nhiều tập lệnh"? –

Trả lời

2

Bạn có thể làm như sau:

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

Bây giờ bạn có thể truy vấn mỗi bảng và concat kết quả:

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

Một lựa chọn khác là sử dụng UNION trên hai kết quả tức là làm concat trong SQL.

+0

Phương thức .split hoạt động tốt hơn cho tôi ở đây, vì hai truy vấn không liên quan (nhưng chia sẻ các dẫn xuất tương tự). Cảm ơn! –

Các vấn đề liên quan