У меня есть кусок кода, который поддерживает процедуру создания записей опроса. 1 приводит к сбою, и я не могу понять, почему. Вот отрывок:Cx_oracle в Python, дающий «отсутствующую ошибку выражения» - литералы даты и времени?
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
Теперь я знаю, что линия работает, если бы я, чтобы скопировать его в свои СУБД и жёстко значения Я прохожу, это работает. Столбцы правильные, и все мои типы данных правильные.
Я думаю, что я пытаюсь использовать литералы DATE и TIMESTAMP. Вот как это делается в документации Oracle, но я не уверен, поддерживается ли она в cx_Oracle. Есть ли способ обойти их? Сами поля - это даты и типы данных timestamp, поэтому я думал, что это правильно.
Да, а еще лучше использовать фактический Python тип DATETIME (вместо строки), которые могут передаваться напрямую и не нуждаются в конвертации! –