对于一些相当复杂的单元测试环境,我们希望动态更改元数据中包含的表。使用.remove(table)
或甚至.clear()
支持从中删除表格。但是如何在以后重新添加这样的表格呢?sqlalchemy:撤消MetaData.remove(表)
MetaData中有一个_add_table(name, schema)
方法,但这似乎不是官方的方法。而且,如果必须去“使用内部方法”路线,Table._set_parent(metadata)
似乎更合适。
还有Table.tometadata(metadata)
它创建一个新的表格实例,附加新的元数据。所以我可以创建一个完整的新元数据并附加所有“现在需要”的表格。但这意味着剩下的所有代码都需要了解新的表格实例,并连接到新的元数据。我不想走这条路。
更新:我们现在考虑fork/multiprocessing仅在子进程(隔离环境)中加载表,以便只有该子进程“受污染”,并且下一个测试不会受到影响。我在这里注意到这是为了完整性,它与主要问题没有严格关系,但可以帮助其他人找到这个问题。
好的,这是一个答案。不是我所希望的,但仍然是。我更新了问题以包含我们当前的解决方案。 – Elrond 2013-02-26 09:32:59