【发布时间】:2021-08-20 15:53:03
【问题描述】:
每个月我都必须根据同一组数据创建一份报告。我刚刚完成将所有这些信息迁移到 Access 并更新我的报告代码以从 Access 表中读取数据,这一直是救命稻草。但是,在报告的最后,我需要用本月的“ulr”值更新其中一张表。为了安全起见,我希望代码永远不要读取本月的 ulr 值,在运行时删除 Access 表中存在的任何内容,然后将本月的 ulr 添加到表中。这样,如果我必须多次运行代码,它总是用最近的运行替换本月的值。表中的所有值都有一个“asof”字段,指示它们来自哪个报告月份,以便更轻松地完成此操作。
我从表中读取没有问题,向它写入新值也没有问题。但是,我似乎无法从表中删除记录。我想删除所有“asof”值等于变量“reportdate”的记录,该变量是报告日期的熊猫时间戳。这个月是 pd.Timestamp(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()
【问题讨论】:
-
这是否消除了错误?
r"DELETE FROM ulrs WHERE asof = #{}#".format(reportdate)) -
该死的,做到了。我可以请您解释为什么需要标签吗?非常感谢您的帮助!
-
在 Access 代码(Access SQL 和 VBA)中,
#字符用于分隔文字日期值,以便 Access 将它们识别为日期/时间值。如果没有这些分隔符,数据库引擎会将 2021-04-30 解释为 2021 减 4 减 30。 -
太棒了,感谢 HansUp
标签: python sql ms-access pyodbc ms-access-2016