清除sqlalchemy反射缓存

时间:2010-06-18 09:10:31

标签: python sqlalchemy

我正在使用sqlalchemy的反射工具来获取Table对象。我这样做是因为这些表是动态的,表/列可以更改。这是我正在使用的代码:

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

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

问题在于,当上述代码运行两次时,无论列是否已更改,它似乎都会返回相同的结果。我尝试使用mysession.refresh(mytable)进行刷新但是失败了,因为表没有附加到任何元数据 - 这是有道理的但是为什么我看到缓存的结果?

有没有办法告诉元数据/引擎/会话忘记这个表并让我干净地加载它?

2 个答案:

答案 0 :(得分:5)

传入新创建的新元数据实例。

答案 1 :(得分:1)

感谢codeape上面的评论,我能够通过将语法更改为:

来解决问题
def getTableByReflection(self, tableName, metadata, engine):

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

每次传入一个新的MetaData()实例。这可能会影响性能但在我的应用程序的这一部分对我来说没问题。

归功于codeape