Python:pyodbc,Microsoft Access:使用#date 限定符更新 table 中的日期
Python: pyodbc, Microsoft Access: update dates in table, using # date qualifier
我正在尝试使用 Python 中的 pyodbc 更新 Microsoft Access 数据库中的一些记录。我正在努力更新 Access 中的 date/time 字段,这将需要 sql 语句中的 # date 限定符符号。
语句示例可以是
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 字段(包括在 Access 数据库中清空 DateTime 字段)的正确 syntax/workaround 是什么?
尝试不同尝试时的错误代码(使用实际的 table 名称和字段名称,而不是上面示例中使用的示例名称):
将日期作为字符串传递时
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>)
井号 (#
) 分隔符仅在 SQL 命令文本本身的日期文字中需要。它们在参数化查询中不是必需的(实际上是无效的)。
这有效,已使用 pyodbc 4.0.24 验证:
sql = "UPDATE [Status Scorecard] SET [IN:Start Execute] = ? WHERE [IN:ID] = ?"
params = (datetime.date(2015, 9, 14), '47977')
crsr.execute(sql, params)
cnxn.commit()
结果:
IN:ID IN:Start Execute
----- ----------------
47977 2015-09-14
到"blank out"日期,使用None
params = (None, '47977')
我正在尝试使用 Python 中的 pyodbc 更新 Microsoft Access 数据库中的一些记录。我正在努力更新 Access 中的 date/time 字段,这将需要 sql 语句中的 # date 限定符符号。
语句示例可以是
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 字段(包括在 Access 数据库中清空 DateTime 字段)的正确 syntax/workaround 是什么?
尝试不同尝试时的错误代码(使用实际的 table 名称和字段名称,而不是上面示例中使用的示例名称):
将日期作为字符串传递时
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>)
井号 (#
) 分隔符仅在 SQL 命令文本本身的日期文字中需要。它们在参数化查询中不是必需的(实际上是无效的)。
这有效,已使用 pyodbc 4.0.24 验证:
sql = "UPDATE [Status Scorecard] SET [IN:Start Execute] = ? WHERE [IN:ID] = ?"
params = (datetime.date(2015, 9, 14), '47977')
crsr.execute(sql, params)
cnxn.commit()
结果:
IN:ID IN:Start Execute
----- ----------------
47977 2015-09-14
到"blank out"日期,使用None
params = (None, '47977')