cx_ Oracle строковое представление to_date () выдает ошибку - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю динамический c оператор обновления на основе значений из dict.

dict1 = {"name": "Test name",
         "id": 100,
         "location": "",
         "custom": "01/01/2020"}

print(dict1)
print()
dict2 = {}
func1 = 'to_date({}, "dd/mm/yyyy")'
for k, v in dict1.items():
    if k == 'custom':
        v = func1.format(f'"{v}"')

    dict2[k] = v

print(dict2)
{'name': 'Test name', 'id': 100, 'location': '', 'custom': 'to_date("01/01/2020", "dd/mm/yyyy")'}

словарь построен, как и ожидалось, потому что func1 определяется как строка. Однако я пытаюсь увидеть, есть ли способ изменить 'to_date ("01/01/2020", "dd / mm / yyyy")' , хранящийся в dict как to_date (" 01.01.2020 "," дд / мм / гггг ") без одинарных кавычек (не строка)

Я использую это значение при дальнейшей обработке до oracle с использованием cx_ oracle. Оператор обновления будет выдавать ошибку 'ORA-01858: был обнаружен не числовой символ c, где ожидалось числовое значение c

update table1 set dt='to_date("01/01/2020", "dd/mm/yyyy")' where x=y

Любые предложения быть полезным.

1 Ответ

0 голосов
/ 11 февраля 2020

Поместите to_date() в оператор SQL и привяжите только сами данные:

dict1 = {"name": "Test name",
         "id": 100,
         "location": "wherever",
         "custom": "01/01/2020"}

sql = """update table1 set dt=to_date(:custom, 'dd/mm/yyyy') where id=:id and location=:location and name = :name"""

cursor.execute(sql, dict1)

Обратите внимание, что имена переменных связывания соответствуют именам ключей dict.

cx_ Oracle документация по переплету здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...