0

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

4

1 回答 1

0

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

此处讨论:Oracle - 文字与格式字符串不匹配错误

我将暂时搁置它,以防其他人也遇到这个问题:)

于 2016-07-26T18:52:58.113 回答