清除 SQLAlchemy 反射缓存

3 投票
2 回答
3435 浏览
提问于 2025-04-16 00:08

我正在使用sqlalchemy的反射工具来获取一个表对象。这样做是因为这些表是动态的,表和列可能会发生变化。以下是我使用的代码:

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, metadata, autoload = True, autoload_with = engine)

问题是,当我运行上面的代码两次时,无论列是否发生了变化,它似乎总是返回相同的结果。我尝试使用mysession.refresh(mytable)来刷新,但这失败了,因为这个表没有附加到任何元数据上——这很合理,但那为什么我会看到缓存的结果呢?

有没有办法让元数据/引擎/会话忘记这个表,让我可以干净地加载它呢?

2 个回答

1

感谢codeape上面的评论,我通过把语法改成下面这样解决了问题:

def getTableByReflection(self, tableName, metadata, engine):

    return Table(tableName, MetaData(), autoload = True, autoload_with = engine)

所以每次都传入一个新的MetaData()实例。这可能会影响性能,但在我这个应用的部分来说,没关系。

所有的功劳都要归功于codeape

6

传入一个新创建的、全新的元数据实例。

撰写回答