使用python将Date变量传递给SQL查询

kx7yvsdv  于 2023-01-01  发布在  Python
关注(0)|答案(2)|浏览(188)

我正在尝试用python编写一个sql查询,我希望用户在其中传递一个保存在变量中的日期。然后我希望这在查询中得到处理。虽然在R中这样做相当容易,但我很好奇在python中是否也有一个简单的方法。日期应该在2022-12-12的地方传递。

date = input("this format  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('2022-12-12','YYYY-MM-DD')
  AND REGEXP_LIKE(a.PORTFOLIO_CODE,'^[[:digit:]]+$')
  AND NOT b.POR_INVESTMENT_TYPE IN #######
  AND b.REF_TO_DATE > TO_DATE('2022-12-12','YYYY-MM-DD')
  AND a.RESULT_STATE_ID > 12
"""
guykilcj

guykilcj1#

docs
在SQL和PL/SQL语句中,与Oracle数据库之间传递数据的SQL和PL/SQL语句应使用占位符来标记提供或返回数据的位置。这些占位符称为绑定变量或绑定参数。绑定变量是以冒号为前缀的标识符或数字。例如,以下SQL语句中有两个绑定变量(dept_id和dept_name):

sql = """insert into departments (department_id, department_name)
        values (:dept_id, :dept_name)"""
cursor.execute(sql, [280, "Facility"])

[or命名绑定]

cursor.execute("""
        insert into departments (department_id, department_name)
        values (:dept_id, :dept_name)""", dept_id=280,
        dept_name="Facility")

应用到您的示例中,得出:

date = input("this format  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(: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(:date,'YYYY-MM-DD')
  AND a.RESULT_STATE_ID > 12
"""
cursor.execute(query_new_Limits, date=date)  # using kwarg binding
7vhp5slm

7vhp5slm2#

给你个建议:

  • 避免“date”作为变量名,因为它是保留字
  • 可能底层驱动程序没有使用参数“bind by name”-尝试传递参数数组('2022-12- 31','2022-12- 31')或类似参数,以排除参数名称问题

相关问题