【问题标题】:Incorporate Pandas Data Frame in Query to Database在对数据库的查询中合并 Pandas 数据框
【发布时间】:2021-03-10 20:50:29
【问题描述】:

我试图弄清楚在 Python 中查询数据库时如何将 pandas 数据框视为 SQL 表。

我来自 SAS 背景,可以轻松地将工作表合并到直接数据库查询中。

例如:

Select a.first_col, 
       b.second_col
from database.table1 a
left join work.table1 b on a.id = b.id;

这里的 work.table1 不在数据库中,而是保存在本地 SAS 服务器中的数据集。

在我的研究中,我找到了将数据框写入数据库然后将其包含在查询中的方法。我没有数据库的写权限,所以这不是我的选择。

我也知道我可以使用sqlalchemypd.to_sql() 将数据框放入SQL 引擎,但我不知道是否有办法将该引擎与pyodbc 连接我有数据库。

我也试过这个,但我认为它不会起作用(表和列的名称已更改)。

df = pd.DataFrame([A342,B432,W345],columns=['id'])

query = '''
select a.id, b.id
from df a 
left join database.base_table b on a.id= b.id
'''
 
query_results = pd.read_sql_query(query,connection)

正如我所料,它不起作用。

我正在连接到 Netezza 数据库,我不确定这是否重要。

【问题讨论】:

    标签: python sql pandas odbc


    【解决方案1】:

    我不认为这是可能的,它必须写入自己的表才能被查询,虽然我不熟悉 Netezza。

    为什么不纯粹在 pandas 中执行 join(在 pandas 中是“合并”)?了解如果 sql 表很大,这是不可行的,但是,

    query = """
            SELECT id, x
            FROM a
            """
    
    a = pd.read_sql(query, conn)
    
    df = # some dataframe in memory
    
    pd.merge(df, a, on='id', how='left') 
    

    请参阅https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html 了解有关 sql 和 pandas 相似性的优秀文档

    【讨论】:

    • 我无法将查询拉入数据框,然后使用 pd.merge,因为它太大了。我想使用一个小得多的数据框作为基表,然后使用左连接只查询我需要的记录。在没有过滤器的情况下查询 Netezza 表(我需要这样做以获取每条潜在记录)是不可行的。感谢您的回复。
    • 有多小?你能把超小的数据框放入查询中并加入吗?
    猜你喜欢
    • 2017-07-10
    • 2018-09-04
    • 2018-04-03
    • 2019-07-23
    • 2021-06-25
    • 1970-01-01
    • 2021-08-15
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多