2013-02-13 74 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