【问题标题】:Pandas read_sql query with multiple selects带有多个选择的 Pandas read_sql 查询
【发布时间】:2016-12-03 10:14:59
【问题描述】:

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

只带入查询中的第一个表。

我是否可以同时提取两个查询结果(可能使用字典),这样我就不必将查询分成多个脚本。

【问题讨论】:

  • 您希望如何在一个数据框中拥有两组不同的列?
  • 我希望有一种方法可以创建一个包含所有数据框的字典。
  • “进入多个脚本”是什么意思?
  • 查询之间有什么关系?设计一个带有 CROSS JOIN、INNER JOIN 或 SQL Server 的 CROSS APPLY 的 SQL 脚本到一个语句中。然后立即导入 pandas 以通过列指示器迁移到数据帧字典中。

标签: python sql sql-server python-3.x pandas


【解决方案1】:

您可以执行以下操作:

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。

【讨论】:

  • .split 方法在这里更适合我,因为这两个查询不相关(但共享相似的派生)。谢谢!
猜你喜欢
  • 2016-07-05
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多