2013-02-13 70 views
3

对于一些相当复杂的单元测试环境,我们希望动态更改元数据中包含的表。使用.remove(table)或甚至.clear()支持从中删除表格。但是如何在以后重新添加这样的表格呢?sqlalchemy:撤消MetaData.remove(表)

MetaData中有一个_add_table(name, schema)方法,但这似乎不是官方的方法。而且,如果必须去“使用内部方法”路线,Table._set_parent(metadata)似乎更合适。

还有Table.tometadata(metadata)它创建一个新的表格实例,附加新的元数据。所以我可以创建一个完整的新元数据并附加所有“现在需要”的表格。但这意味着剩下的所有代码都需要了解新的表格实例,并连接到新的元数据。我不想走这条路。

更新:我们现在考虑fork/multiprocessing仅在子进程(隔离环境)中加载表,以便只有该子进程“受污染”,并且下一个测试不会受到影响。我在这里注意到这是为了完整性,它与主要问题没有严格关系,但可以帮助其他人找到这个问题。

回答

1

几乎不支持以非加法的方式突变MetaData对象,总体而言,您不应该在其上构建用例。使用新的MetaData包含您在特定场景中查找的模式的对象将效果最佳。

+0

好的,这是一个答案。不是我所希望的,但仍然是。我更新了问题以包含我们当前的解决方案。 – Elrond 2013-02-26 09:32:59