我目前正在与Python和Pandas合作,以查询我的数据库数据。我有一个查询来获取一些客户信息(显然这不是真正的查询,它可以在没有加入等的情况下简化。):

问题描述 投票:0回答:0
要求改变了,我需要根据客户周围的情况生成两个不同的数据集。 原始查询仍然存在,我们仍然需要first_name,last_name等,因此我不想创建两个完全独立的查询。 我想在我的查询中添加一个were子句:

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"}, )
I不能仅仅将supquery放在用参数的语句中。我希望做的是将子查询作为参数。
这样,我可以将子查询作为参数传递,并生成两个不同的数据集。不过,这与大熊猫不起作用。
我唯一能想到的是独立执行子查询,从中获取客户ID并将其传递给我的“ customer_query”功能。这不像在一个SQL语句中执行所有内容那样好,但是我没有其他想法。我还避免了用f字符串或其他东西构建SQL语句的想法。

Edit: 我忘了提到我连接到Oracle DB,而“ con”对象是cx_oracle连接。 显然,我对解决方案的想法无效,因为cx_oracle并不真正支持将列表作为参数传递。 您可能会更好地创建两个查询,因此优化器调整每个查询。 就像一切“取决于”一样。 他们多久运行一次? 连接是否保持打开状态(还需要考虑语句缓存)等。

在Oracle SQL中,绑定值不用于构建SQL语句(因此其安全益处)。

启用参数,我们可以简单地将其替换为以下:

stmt = """ SELECT first_name last_name dob FROM customer where id in (<<sub>>) """ stmt = stmt.replace("<<sub>>", "SELECT customer_id FROM different_table_1")

我还面临类似的问题,我想将查询的动态案例部分传递给动态查询。因此,最后对我有用。

python sql pandas
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.