将 Python 个变量组合成 SQL 个查询

Combining Python variables into SQL queries

我正在使用 SQL/postgresql 查询从在线数据库中提取数据,并使用 Pandas 将其转换为 Python 数据框。我希望能够从我的 Python 脚本中的一个点更改 SQL 查询中的日期,而不必手动遍历每个 SQL 查询并像那里那样一个一个地更改它有很多查询,每个查询都有很多行。

这就是我要开始的例子:

random_query = """
select *
from table_A as a
where date_trunc('day',a.created_at) >= date('2022-03-01') 
and date_trunc('day',a.created_at) <= date('2022-03-31')

group by 1,2,3

"""

然后我将数据读入Pandas如下:

df_random_query = pd.read_sql(random_query, conn)

上面的连接是与数据库的连接 - 问题不存在,所以我在此处排除了那部分代码。

我尝试过的是:

start_date = '2022-03-01'
end_date = '2022-03-31'

我已将上述 2 个日期设置为变量,然后在下面我尝试在 SQL 查询中使用它们,如下所示:

attempted_solution = """
select *
from table_A as a
where date_trunc('day',a.created_at) >= date( 
""" + start_date + """)
and date_trunc('day',a.created_at) <= date(
""" + end_date + """)

group by 1,2,3
"""

这确实 运行 但它给了我一个没有数据的数据框 - 即没有数字。我不确定我做错了什么 - 任何帮助都会有帮助。

尝试删除 date 函数和格式:

my_query = f"... where date_trunc('day', a.created_at) >= {start_date}"

我能够按如下方式计算出来:

start_date = '2022-03-01'
end_date = '2022-03-31'

random_query = f"""
select *
from table_A as a
where date_trunc('day',a.created_at) >= date('start_date') 
and date_trunc('day',a.created_at) <= date('end_date')

group by 1,2,3

"""

有趣的是,我只需将 start_date 和 end_date 也放入“ ”即可。我只是通过打印脚本中显示的查询来注意到这一点。这里的关键是知道如何排除故障。

另一种选择是在查询末尾使用 .format() 并在其中说 .format(start_date = '2022-03-01', end_date = '2022-03-31').