You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历cursor.tables()列表删表时提示'MSysAccessStorage'不存在如何解决

问题原因
  • cursor.tables()默认返回Access数据库内所有类型的表对象,包括以MSys为前缀的内置系统表,这类表属于Access的系统元数据,本身不允许用户执行删除操作,部分虚拟系统表物理上不存在,因此会触发不存在的报错。
  • DROP TABLE语句语法错误:你已经通过pyodbc连接到costingDB1.accdb,执行删除操作不需要额外加库名前缀,添加前缀反而会导致Access驱动无法正确识别表名。
  • 没有过滤表类型:cursor.tables()返回结果包含视图、链接表、系统表等多种对象,只有table_type为TABLE的才是用户创建的普通表,可执行删除操作。
修复方案

修改后的代码如下:

for row in cursor.tables():
    # 过滤普通用户表,排除系统表、视图等非可删对象
    if row.table_type == "TABLE" \
        and not str(row.table_name).startswith("MSys") \
        and str(row.table_name) not in ("pricesBackup", "recipesBackup"):
        # 用反引号包裹表名,避免表名含空格、特殊字符时触发语法错误
        sqlLine = f"DROP TABLE `{row.table_name}`"
        print(sqlLine)
        cursor.execute(sqlLine)
        conn.commit()

内容的提问来源于stack exchange,提问作者astropos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:39:03