Python中的Cx_oracle表示"缺少表达式错误" - 日期和时间戳文字?

时间:2016-07-26 18:44:02

标签: python python-3.x cx-oracle ora-00936

我有一大堆代码支持制作调查记录的程序。 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中受支持。有没有办法绕行需要它们?字段本身是日期和时间戳数据类型,所以我认为这是正确的。

1 个答案:

答案 0 :(得分:0)

我刚刚找到答案 - 文字不好用,to_date()和to_timestamp()是传递日期和时间戳的正确格式的正确方法。

在此讨论:Oracle - literal does not match format string error

我现在要把它留下来以防其他人遇到这个问题:)