每个月我都要用同一组数据创建一份报告。我刚刚完成了将所有这些信息迁移到Access中,并更新了我的报告代码,以便从Access表中读取数据,这是一个救命稻草。但是,在报告的末尾,我需要用本月的“ulr”值更新其中一个表。为了安全起见,我希望代码永远不要读取本月的ulr值,在运行时删除Access表中存在的任何值,然后将本月的ulr添加到表中。这样,如果我必须多次运行代码,它总是用最近一次运行来替换本月的值。表中的所有值都有一个“asof”字段,指示它们来自哪个报告月份,以简化此操作
我可以从表中读取,也可以向表中写入新值。但是,我似乎无法从表中删除记录。我想删除所有“asof”值等于变量“reportdate”的记录,该变量是报告日期的时间戳。这个月是pd时间戳(2021,4,30)
ProgrammingError Traceback (most recent call last)
<ipython-input-36-c6e3188cf05f> in <module>
6 cnxn = pyodbc.connect(connStr)
7 crsr = cnxn.cursor()
----> 8 crsr.execute(
9 r"DELETE FROM ulrs WHERE asof = {}".format(reportdate))
10 cnxn.commit()
ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '[asof]=2021-04-30 00:00:00'. (-3100) (SQLExecDirectW)")
我尝试了delete语句的变体,但每次都会出现错误,或者代码运行正常,但没有从表中删除任何内容。任何洞察都会很精彩,谢谢
#Delete all rows in ulrs Access table for the current month:
connStr = (
r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ=%s;" % ('W:\\Data for Reports\\Act vs Exp Data\\Program A v E\\AvE Databases\\ave_reference - Copy.accdb')
)
cnxn = pyodbc.connect(connStr)
crsr = cnxn.cursor()
crsr.execute(
r"DELETE FROM ulrs WHERE asof={}".format(reportdate))
cnxn.commit()
考虑参数化,除其他原因外,更好地促进数据类型,而不是任何EEM>标点符号需要引号或数字符号。PyODBC支持带有qmarks的parameters
注意
cursor.execute
中使用的第二个参数。下面假设reportdate
是一个Python日期/时间变量相关问题 更多 >
编程相关推荐