【问题标题】:Two Different Database Connections Same Time Python两个不同的数据库连接同时 Python
【发布时间】: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 数据源。不过,同样的方法也适用。

标签: python sql oracle


【解决方案1】:

你可以用列表来做到这一点。获取第一个ID列表:

cur1 = connection.cursor()
cur2 = connection2.cursor()

cur1.execute("""SELECT ID FROM TABLE WHERE DATE = '13JUN2018' """)

List_ID = [ id[0] for ID in cur1.fetchall() ]

cur2.execute("""SELECT ID_2 FROM VW_TABLE WHERE DATE = '2018-06-13'""")

List_ID_2 = [ id[0] for ID in cur2.fetchall() ]

# This will subtract values of ID_2 list from ID List 
df1_not_2 = set(List_ID) - set(List_ID_2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多