【发布时间】:2019-03-05 09:36:04
【问题描述】:
当我想在之后将查询的数据内部连接到 pandas 数据帧时,查询我的 SQL (T-SQL) 数据库的最有效方法是什么?
我不知道如何通过 PYODBC 查询将信息从 Python 传递到 SQL,所以我目前最好的想法是以我知道与我的 Python 数据框一致的方式形成查询(即我知道所有信息都有 STARTDATE > 2016,所以我很容易提出要求,而且我知道 PRODUCT = Private_Car)。但是,如果我使用:
SELECT *
FROM rmrClaim
WHERE (PRODUCT = 'Private_Car') AND (YEAR >= 2016)
我仍然会引入比必要更多的数据。我宁愿能够做的是从 SQL DB 中仅选择包含我的合并键 (ID) 的数据。
是否有更有效的方法来查询数据库,以便在给定 pandas 数据框的情况下,我只能带来之后内部连接所需的数据? 我可以使用 PYODBC 将 python 中的列表传递到 sql 查询中吗?
编辑 - 尝试不同的措辞:
我有一个来自 CSV 的数据框(数据框 A),我想从我的 SQL 数据库中获取数据以生成一个数据框(数据框 B)。我的 SQL DB 中的数据比数据帧 A 中的数据大得多,所以我希望能够发送一个 SQL 查询,它只请求数据帧 A 中的数据,这样我就不会得到一个数据帧 B比数据框 A 大 10 倍。我目前的想法是使用我对数据框 A 的了解(即数据框 A 中的所有数据都在 2016 年之后)但是如果有办法将列表传递到我的 SQL 查询中,我可以更高效地查询数据子集
【问题讨论】:
-
使用 pymssql 并在将查询传递给 pandas 数据框之前编写查询。你需要一个例子吗?
-
“所以我希望能够发送一个只请求数据帧 A 内的数据的 SQL 查询”——我很困惑。如果您确实需要将您检索到的数据与 DataFrame 行进行 LEFT JOIN,那么根据定义,您的 SQL 查询将需要检索 DataFrame 中 not 的行。如果您只想检索与 DataFrame 中的行匹配的行,那么 INNER JOIN 就足够了。
-
@Gord Thompson,你是对的,内部连接是正确的。问题是关于如何从 SQL DB 中检索数据,这使得内部联接完全匹配 SQL DB 中的 ID 和我的 csv 中的 ID,而不会带来额外的数据。更正了主要帖子。
标签: python sql pandas tsql pyodbc