当前位置: 首页 > 面试题库 >

带有多个选择的熊猫read_sql查询

杜晨朗
2023-03-14
问题内容

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。



 类似资料:
  • 问题内容: 是否有任何示例说明如何在Pandas中通过SQL查询传递参数? 特别是我正在使用SQLAlchemy引擎连接到PostgreSQL数据库。到目前为止,我发现以下工作原理: Pandas文档说,params也可以作为dict传递,但是例如,我似乎无法通过尝试使它起作用: 建议从熊猫运行这些类型的查询的方法是什么? 问题答案: 该文件说这个参数可以是一个列表,元组或字典(见文档)。 通过在

  • 问题内容: 我有一个从csv文件构建的pandas中的数据框。数据框有几列,并由其中一列进行索引(这是唯一的,因为每一行都有用于该索引的该列的唯一值。) 如何基于应用于多个列的“复杂”过滤器选择数据框的行?我可以轻松地从列中大于10的数据框中选择切片,例如: 但是,如果我想要的东西就像一个过滤器:选择的切片,其中 任何 列都大于10? 或者,如果for的值大于10但值小于5? 这些如何在熊猫中实现

  • 问题内容: 我有一个带有列“ A”和“ B”的多索引数据框。 有没有一种方法可以通过在多索引的一列上进行过滤而不选择将索引重新设置为单列索引来选择行? 例如。 问题答案: 一种方法是使用Index方法: 在0.13,你就可以使用与参数: 注意:如果这是列MultiIndex而不是索引,则可以使用相同的技术:

  • 我有1个数据帧,我想选择所有没有重复的行 我的df: 我的输出应该是: 我正在使用熊猫数据框 有什么建议吗?

  • 问题内容: 我正在寻找一种等效于SQL的方法 pandas sql比较与无关。 仅适用于单个列,因此我想我可以合并这些列,或将它们放在列表/元组中并进行比较,但这似乎是熊猫应该以更原生的方式进行的操作。 我是否缺少明显的东西,或者没有办法做到这一点? 问题答案: 您可以使用该方法来获取DataFrame中的唯一行: 如果只想使用某些列来确定唯一性,则也可以提供关键字参数。请参阅文档字符串。

  • 我试图基于单个条件,根据多列中的值过滤数据帧,但保留我根本不想应用过滤器的其他列。 我回顾了这些答案,第三个是最接近的,但仍然没有运气: 如何按多列筛选数据帧 筛选多个列 Python熊猫-如何按一个值筛选多个列 设置: 电流输出: 期望输出: 我试过: 以及许多其他变体(,,

  • 我今天观察到,选择两列或更多列的数据帧可能比只选择一列慢得多。 如果我使用loc或iloc选择多个列,并且我使用list传递列名或索引,那么与使用iloc的单个列或多个列选择相比,性能会下降100倍(但没有传递列表) 示例: 单列选择: 两列选择: 只有此选择的工作方式与预期相同:[编辑] 机制上的差异是什么?为什么差异如此之大? [编辑]:正如@run-out指出的,pd。系列似乎比pd处理得快

  • 我只是试图通过整数访问命名的熊猫列。 您可以使用按位置选择行。 但是如何通过整数选择列呢? 我的数据框: