【问题标题】:"Table 'MSysAccessStorage' does not exist" error when dropping tables from cursor.tables() list从 cursor.tables() 列表中删除表时出现“表 'MSysAccessStorage' 不存在”错误
【发布时间】:2021-09-23 14:07:30
【问题描述】:

我已连接到数据库并遍历元数据以获取表名,每次删除表。但是我收到错误消息:

pyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC Microsoft Access Driver] Table 'MSysAccessStorage' does not exist. (-1305) (SQLExecDirectW)")

这没有意义,因为我从数据库中获取表名,所以它必须存在。我的连接必须正常工作以获取表名和我的代码的其他部分,例如插入工作。这是我的代码:

for row in cursor.tables():
            if(str(row.table_name)!="pricesBackup" and str(row.table_name)!="recipesBackup"):
                sqlLine="DROP TABLE costingDB1.accdb." + row.table_name
                print(sqlLine)
                cursor.execute(sqlLine)
                conn.commit()

这对我来说似乎很奇怪,想知道如何解决这个问题。提前谢谢你

【问题讨论】:

    标签: python ms-access pyodbc


    【解决方案1】:

    名称以“MSys”开头的表是无法删除的内部系统表 (row.table_type == "SYSTEM TABLE")。您需要将删除限制在row.table_type == "TABLE" 所在的表中。

    【讨论】:

    • 所有表格都有同样的问题,包括价格等
    • 只要使用f"DROP TABLE [{row.table_name}]"
    【解决方案2】:

    我找到了解决方案:我从删除 MSys 表和 ~TMC 表的表名中创建了一个列表,所以就我的。然后,我使用此列表删除表。我认为问题在于循环中的 2 个 sql 查询发生冲突。它试图从 drop table 命令中查找表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2019-12-05
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多