You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将日期变量传入SQL查询语句

在Python中动态替换SQL查询的日期变量

下面几种简便方法可以实现你的需求,按场景选择即可:

1. f-string字符串插值(Python 3.6+ 最简洁)

直接在SQL字符串前加f,用{变量名}替换目标位置:

date_input = input("请输入日期(格式:YYYY-MM-DD): ") 
query_new_Limits = f"""
SELECT #######
  , a.RULE_NAME
  , a.RESULT_VALUE
  , a.SUMMARY_DETAIL
  , a.REF_DATE
FROM ######## a ################### b
ON b.T_PORTFOLIO_ID = a.PORTFOLIO_ID
WHERE a.REF_DATE = TO_DATE('{date_input}','YYYY-MM-DD')
  AND REGEXP_LIKE(a.PORTFOLIO_CODE,'^[[:digit:]]+$')
  AND NOT b.POR_INVESTMENT_TYPE IN #######
  AND b.REF_TO_DATE > TO_DATE('{date_input}','YYYY-MM-DD')
  AND a.RESULT_STATE_ID > 12
"""

这种方式可读性极强,代码量最少,适合快速实现。

2. str.format()方法(兼容旧版本Python)

如果你的Python版本低于3.6,用format()填充占位符:

date_input = input("请输入日期(格式:YYYY-MM-DD): ") 
query_new_Limits = """
SELECT #######
  , a.RULE_NAME
  , a.RESULT_VALUE
  , a.SUMMARY_DETAIL
  , a.REF_DATE
FROM ######## a ################### b
ON b.T_PORTFOLIO_ID = a.PORTFOLIO_ID
WHERE a.REF_DATE = TO_DATE('{}','YYYY-MM-DD')
  AND REGEXP_LIKE(a.PORTFOLIO_CODE,'^[[:digit:]]+$')
  AND NOT b.POR_INVESTMENT_TYPE IN #######
  AND b.REF_TO_DATE > TO_DATE('{}','YYYY-MM-DD')
  AND a.RESULT_STATE_ID > 12
""".format(date_input, date_input)

占位符{}会按顺序被format()的参数替换,这里两个位置用同一个变量,所以传两次。

3. 参数化查询(生产环境首选,防SQL注入)

如果要直接执行SQL,务必用参数化查询,避免安全风险,同时避免日期格式错误。以Oracle为例:

import cx_Oracle
from datetime import datetime

date_input = input("请输入日期(格式:YYYY-MM-DD): ") 
# 把输入的字符串转成datetime对象,确保类型正确
date_obj = datetime.strptime(date_input, '%Y-%m-%d')

query_new_Limits = """
SELECT #######
  , a.RULE_NAME
  , a.RESULT_VALUE
  , a.SUMMARY_DETAIL
  , a.REF_DATE
FROM ######## a ################### b
ON b.T_PORTFOLIO_ID = a.PORTFOLIO_ID
WHERE a.REF_DATE = :ref_date
  AND REGEXP_LIKE(a.PORTFOLIO_CODE,'^[[:digit:]]+$')
  AND NOT b.POR_INVESTMENT_TYPE IN #######
  AND b.REF_TO_DATE > :ref_date
  AND a.RESULT_STATE_ID > 12
"""

# 连接数据库并执行查询
conn = cx_Oracle.connect("用户名/密码@数据库地址")
cursor = conn.cursor()
cursor.execute(query_new_Limits, ref_date=date_obj)

参数化查询由数据库处理变量的转义与类型转换,安全且可靠,是生产环境的标准做法。

内容的提问来源于stack exchange,提问作者Sebastian Damon B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:20:40