首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pandas将子查询传递给Python中的动态查询的最佳实践

问使用Pandas将子查询传递给Python中的动态查询的最佳实践
EN

Stack Overflow用户
提问于 2020-02-25 09:57:16
回答 1查看 225关注 0票数 0

我目前正在使用Python和Pandas从我的数据库中查询数据。我有一个查询来获取一些客户信息(这显然不是真正的查询,它简化了,没有联接等等):

代码语言:javascript
复制
def customer_query(con, date):
    stmt = """
    SELECT
        first_name
        last_name
        dob
    FROM
        customer
    """
    return pd.read_sql(
        stmt,
        con
    )

我这样做熊猫,以便我可以很容易地导出数据集到csv没有任何麻烦。

需求发生了变化,我需要根据客户周围的情况生成两个不同的数据集。原始查询仍然有效,我们仍然需要first_name、last_name等,所以我不想创建两个完全独立的查询。我想在查询中添加WHER-子句,如下所示:

代码语言:javascript
复制
def customer_query(con, date):
    stmt = """
    SELECT
        first_name
        last_name
        dob
    FROM
        customer
    where id in (:sub)
    """
    return pd.read_sql(
        stmt,
        con,
        params={"sub": "SELECT customer_id FROM different_table_1"},
    )

我不能将子查询放在带有参数的语句中。我想要做的是将子查询作为参数。通过这种方式,我可以将子查询作为参数传递,并生成两个不同的数据集。不过,这并不适用于熊猫。我唯一能想到的就是自己执行子查询,从中获取客户is并将它们传递给我的"customer_query“函数。这不如执行一个SQL语句中的所有内容好,但我没有其他想法。我也不想用f字符串或什么东西来构建sql语句。

编辑:我忘记提到我连接到一个Oracle,而"con“对象是一个cx_Oracle连接。显然,我对解决方案的想法是无效的,因为cx_Oracle并不真正支持将列表作为参数传递。

EN

回答 1

Stack Overflow用户

发布于 2020-02-25 11:13:58

您最好创建两个查询,以便优化器对每个查询进行调优。就像一切“视情况而定”。他们多久跑一次?连接是否保持打开(还有需要考虑的语句缓存),等等。

在Oracle SQL中,绑定值不用于构建SQL语句(因此它们的安全性好处)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60391824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档