从 cursor.tables() 列表中删除表时出现“表 'MSysAccessStorage' 不存在”错误
Posted
技术标签:
【中文标题】从 cursor.tables() 列表中删除表时出现“表 \'MSysAccessStorage\' 不存在”错误【英文标题】:"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()
这对我来说似乎很奇怪,想知道如何解决这个问题。提前谢谢你
【问题讨论】:
【参考方案1】:名称以“MSys”开头的表是无法删除的内部系统表 (row.table_type == "SYSTEM TABLE"
)。您需要将删除限制在row.table_type == "TABLE"
所在的表中。
【讨论】:
所有表格都有同样的问题,包括价格等 只要使用f"DROP TABLE [row.table_name]"
【参考方案2】:
我找到了解决方案:我从删除 MSys 表和 ~TMC 表的表名中创建了一个列表,所以就我的。然后,我使用此列表删除表。我认为问题在于循环中的 2 个 sql 查询发生冲突。它试图从 drop table 命令中查找表。
【讨论】:
以上是关于从 cursor.tables() 列表中删除表时出现“表 'MSysAccessStorage' 不存在”错误的主要内容,如果未能解决你的问题,请参考以下文章