read_sql查询可以处理带有多个select语句的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:PW!@Table") connection = engine.connect() df = pd.read_sql_query(script,connection) connection.close()
仅引入查询中的第一个表。
无论如何,我可以同时获取两个查询结果(也许带有字典),这将避免我不得不将查询分为多个脚本。
您可以执行以下操作:
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("---")
现在,您可以查询每个表并合并结果:
df = pd.concat([pd.read_sql_query(q, connection) for q in queries])
另一种选择是对两个结果使用UNION,即在SQL中进行concat。