Я пытаюсь обновить некоторые записи в базе данных Microsoft Access, используя pyodbc в Python. Я изо всех сил пытаюсь обновить поля даты / времени в Access, что потребовало бы символа # даты в выражении sql.
Примером утверждения может быть
sql = '''UPDATE [TABLE] SET[STARTDATE]=#2018-10-25# WHERE[KEYCOLUMN]=12345;'''
Используя запрос параметра, это выглядело бы как
sql = '''UPDATE [TABLE] SET[STARTDATE]=? WHERE[KEYCOLUMN]=?;'''
params = (#2018-10-25#, 12345)
cursor.execute(sql, params)
Однако выполнение завершается сбоем из-за обязательных символов # для квалификатора данных.
Также использование библиотеки datetime бесполезно, так как следующие параметры также приводят к неудачному выполнению:
params = (datetime.date(2018,10,25), 12345)
cursor.execute(sql, params)
Каким будет правильный синтаксис / обходной путь для обновления полей DateTime, включая закрытие поля DateTime в базе данных Access?
Коды ошибок при попытке разных попыток (с фактическими именами таблиц и имен полей вместо имен примеров, использованных в предыдущем примере) :
При передаче даты в виде строки
SQL: UPDATE [Status Scorecard] [IN:Start Execute] = ? WHERE [IN:ID]=?;
Params: ('2015-09-14', '47977')
Error:(<class 'pyodbc.ProgrammingError'>, ProgrammingError('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. (-3503) (SQLExecDirectW)'), <traceback object at 0x07E24120>)
При передаче данных с символом # в качестве разделителя даты:
sql = '''UPDATE [Status Scorecard] [IN:Start Execute] = ? WHERE [IN:ID]=?;'''
params = (#2015-09-14#, '47977')
print(params)
r = axSCORECARD.updateSQL(sql, params)
Код не запускается, так как символ # рассматривается как комментарий, что приводит к ошибке синтаксиса кода.
При передаче данных в виде строки, используя разделитель даты # внутри строки:
SQL: UPDATE [Status Scorecard] [IN:Start Execute] = ? WHERE [IN:ID]=?;
Params: ('#2015-09-14#', '47977')
Error:(<class 'pyodbc.ProgrammingError'>, ProgrammingError('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. (-3503) (SQLExecDirectW)'), <traceback object at 0x07E24148>)
При передаче даты в виде вызова datetime.date (после добавления «import datatime» в скрипт):
SQL: UPDATE [Status Scorecard] [IN:Start Execute] = ? WHERE [IN:ID]=?;
Params: (datetime.date(2015, 9, 14), '47977')
Error:(<class 'pyodbc.ProgrammingError'>, ProgrammingError('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. (-3503) (SQLExecDirectW)'), <traceback object at 0x07E240D0>)