對於一些相當複雜的單元測試環境,我們希望動態更改元數據中包含的表。使用.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