使用pyodbc从Access中删除行时出现问题

2024-10-02 18:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

每个月我都要用同一组数据创建一份报告。我刚刚完成了将所有这些信息迁移到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()

Tags: 代码inaccess报告记录时间microsoftprogrammingerror
1条回答
网友
1楼 · 发布于 2024-10-02 18:26:42

考虑参数化,除其他原因外,更好地促进数据类型,而不是任何EEM>标点符号需要引号或数字符号。PyODBC支持带有qmarks的parameters

注意cursor.execute中使用的第二个参数。下面假设reportdate是一个Python日期/时间变量

crsr.execute("DELETE FROM ulrs WHERE asof = ?", reportdate)
cnxn.commit()

相关问题 更多 >