我有一大堆代码支持制作调查记录的程序。 1行导致它失败,我无法弄清楚原因。这是一个片段:
data = [4, 1, 5, '2015-01-01', '2016-07-26 14:32:19']
insert_query2 = 'INSERT INTO SURVEY_RESPONSE (ID, SURVEY_ID, RESPONDENT_ID, DATE_TAKEN, DATE_ENTERED) VALUES (:sr_id , :survey_id , :respondent_id , DATE :dt , TIMESTAMP :ts )'
cursor.prepare(insert_query)
cursor.execute(None, {"sr_id":data[0], "survey_id":data[1], "respondent_id":data[2], "dt":data[3], "ts":data[4]})
所以我的数据被打包到一个列表中,然后我尝试将每个列表元素作为参数传递。正如我在示例中看到的那样,我试图通过行本身,但仍然收到错误:
File "myfile.py", line 95, in insert_new_survey_response
cursor.execute(insert_query2, {"sr_id":data[0], "survey_id":data[1], "respondent_id":data[2], "dt":data[3], "ts":data[4]})
cx_Oracle.DatabaseError: ORA-00936: missing expression
现在我知道这条线有效,如果我将它复制到我的DBMS中并硬编码我传递的值,它就可以了。列是正确的,我的所有数据类型都是正确的。
我认为这是我尝试使用DATE和TIMESTAMP文字的方式。它是如何在Oracle文档中完成的,但我不确定它是否在cx_Oracle中受支持。有没有办法绕行需要它们?字段本身是日期和时间戳数据类型,所以我认为这是正确的。
答案 0 :(得分:0)
我刚刚找到答案 - 文字不好用,to_date()和to_timestamp()是传递日期和时间戳的正确格式的正确方法。
在此讨论:Oracle - literal does not match format string error
我现在要把它留下来以防其他人遇到这个问题:)