【发布时间】:2018-06-14 18:03:03
【问题描述】:
所以我目前正在寻找解决以下问题:
import cx_Oracle
import pandas as pd
import pypyodbc
connection = cx_Oracle.connect(user, password, name)
df = pd.read_sql(""" SELECT ID FROM TABLE WHERE DATE = '13JUN2018' """, connection)
connection_2 = pypyodbc.connect(blah, blah, db)
df_2 = pd.read_sql(""" SELECT ID_2 FROM VW_TABLE WHERE DATE = '2018-06-13' """, connection_2)
我希望能够比较这两个结果并确定 df 中的值,而不是 df_2 中的值。现在我明白这可以通过说来完成:
""" SELECT ID_2 FROM VW_TABLE WHERE DATE ='2018-06-13' AND ID_2 NOT IN ID"""
我们将 ID 作为列表传递。我宁愿在一个带有 EXCEPT 语句的语句中完成这一切,这样我就不必将 df 存储在内存中。
有没有人做过类似的事情,你同时访问两个数据库。我偏爱 Python,但我愿意看看其他开源工具。
【问题讨论】:
-
如果将两个数据集都拉入 Python 中,则必须在 Python 中进行比较。如果您将一个数据集拉入另一个数据库,那么您可以使用 SQL 进行比较。根据比较的复杂性,后一种方法可能更可取。
-
@rd_nielsen 我试图只从 VW_TABLE 中提取 ID_2 的结果,该结果不在 TABLE 的 ID 列表中。这有意义吗?
-
当然。但是,如果您将 Oracle 查询的结果作为新表拉入 SQLite,那么您可以在子查询中引用它,例如
where ID_2 not in (select ID from the_imported_table). -
@rd_nielsen 猜我对 SQLite 不是很熟悉,你能详细说明一下吗?
-
对不起,我以为您的第二个连接是到 SQLite,但我看到它是到一些 ODBC 数据源。不过,同样的方法也适用。