Python Oracle绑定变量到_日期参数错误

Python Oracle绑定变量到_日期参数错误,python,sql,oracle,to-date,bind-variables,Python,Sql,Oracle,To Date,Bind Variables,我正在编写使用Python脚本执行SQL(Oracle)语句的代码,如下所示: PYTHON: with open(os.path.join(WORKING_PATH, "sql", "fetchCalendar.sql"), 'r') as fetch_date = fetch.read() #(Some other code) CD = timestamp_tostring(ACTUALDATE) print("CD:", CD) cnnSB.cursor.execute(f

我正在编写使用Python脚本执行SQL(Oracle)语句的代码,如下所示:

PYTHON:

with open(os.path.join(WORKING_PATH, "sql", "fetchCalendar.sql"), 'r') as 
    fetch_date = fetch.read()   
#(Some other code)
CD = timestamp_tostring(ACTUALDATE)
print("CD:", CD)
cnnSB.cursor.execute(fetch_date, CD)
fetchCalendar.sql

SELECT YEARNBR as yearnbr, QUARTERNBR as quarternbr, MONTHNBR as monthnbr, WEEKNBR as weeknbr
 FROM MFS_MFSCALENDAR
WHERE ACTUALDATE = TO_DATE(:CD, 'DD-MON-YY')
当我尝试使用以下值运行它时,会输出:

CD:18年8月30日

回溯(最后一次调用):文件“AHT_Init.py”, 第919行,输入 init_load(数据,每周结束,cur,3)文件“AHT_init.py”,第644行,在init_load中 填充_汇总(modelid,test_data,train_data,rollup_cmd)文件“AHT_Init.py”,第684行,在填充_汇总中 cnnSB.cursor.execute(fetch_date,CD)cx_Oracle.DatabaseError:ORA-01036:非法变量名称/编号

(强调“ORA-01036:非法变量名称/编号”)

很自然,我尝试更改变量名,但没有效果。我尝试使用Oracle SQL Developer运行SQL代码(在提示时输入'01-JUN-18',包括单引号),但出现以下错误:

ORA-01858:在指定数字的位置找到非数字字符 预期 185800000-“在需要数字的位置找到非数字字符” *原因:使用日期格式模型转换的输入数据无效 不对。输入数据不包含数字所在的数字 格式模型所要求的。 *操作:修复输入数据或日期格式模型,以确保 元素的数量和类型匹配。然后重试该操作

但是,当我用以下内容替换出有问题的行时:

WHERE ACTUALDATE = TO_DATE('01-JUN-18', 'DD-MON-YY');
代码按预期工作。 有人能告诉我这个问题可能是什么,以及如何解决它吗? 非常感谢你

编辑:我知道fetchCalendar.sql代码中缺少分号;这对于Python在此上下文中如何与Oracle交互是必要的。出于测试目的,我在Oracle SQL Developer上试用时添加了分号,但在删除.SQL文件时不应引起问题。

找到了答案: 简而言之,错误类型错误


我的代码正在将datetime.date传递给一个SQL to_日期转换,该转换需要一个字符串。

如果执行
cnnSB.cursor.execute(fetch_date,CD=CD)
?通常,如果使用命名绑定变量,还应按名称将它们发送到
execute()
函数。这个问题有一些细节:什么是fetchCalendar.sql?我不懂Python,但是否需要传递字符串并将其转换回日期?