Python 创建一个动态sql查询,其中根据给定的参数生成一个条件
我使用下面的SQL查询根据包含年份和月份的month_id获取数据:Python 创建一个动态sql查询,其中根据给定的参数生成一个条件,python,dynamic-sql,Python,Dynamic Sql,我使用下面的SQL查询根据包含年份和月份的month_id获取数据: sql_hours = str("""select * from monthly_hours where month_id IN \ (201701,201702,201703,201704,201705,201706,201707,201708,201709,201710,201711,201712) and class = 'Optimal';""") 基本表如下所示
sql_hours = str("""select * from monthly_hours where month_id IN \
(201701,201702,201703,201704,201705,201706,201707,201708,201709,201710,201711,201712) and class = 'Optimal';""")
基本表如下所示:
device_id month_id group hours tier
53 201705 TX 11.31 Optimal
28 201701 WS 31.56 Sub - Optimal
32 201706 WX 2.93 Optimal
57 201709 TS 2.68 Optimal
28 201702 OE 0.70 Optimal
根据用户希望获取的月份数和当前月份的数据,中的值将发生变化。
例如,当前月份\u id为201802,如果没有\u of \u months=6,我的查询将变成:
sql_hours = str("""select * from monthly_hours where month_id IN \
(201707,201708,201709,201710,201711,201712) and class = 'Optimal';""")
数据滞后2个月,因此2月份当月的最新数据为201712。然而,3月份的最新数据为201801。因此,月份id必须在201707和201712之间。
如果月号=12,则月号必须在201701和201712之间
有人能帮我吗?我不知道如何在python中完成如此多的sql查询参数化 您可以使用变量更新查询字符串,使用.format参数化,例如:
dates = '201707,201708,201709,201710,201711,201712'
sql_hours = str("select * from monthly_hours where month_id IN \
({}) and class = 'Optimal';".format(dates))
只有当您101%确定变量来自您自己的代码,而不是来自任何外部用户、文件、请求或任何输入时,才能执行此操作-除非您不介意打开应用程序进行SQL注入当然,我很抱歉,但我无法确切了解您的问题是什么?根据指定的月数为IN子句选择月数。因此,如果月数为6,从2018年2月的当前日期到2017年9月,将是用于过滤月id的月份列表。那么它与SQL有什么关系?您只需要生成一个YYYYMM字符串列表提示:您需要这里的字符串,如果您使用的是整数,那么这是错误的,这些是数字代码,但不是从一个YYYYMM开始并返回N个月的整数。这里没有什么神奇或过于复杂的东西,关于这种日期操纵已经有很多问题了,例如cf