On Oracle, this assert fails in quite a spectacular way -- "variable not in select list" for running "select * from table" (to get the table description). The reason is that Oracle caches prepared statements, and so it uses the field-list calculated in the previous run of this statement, when the "pink" column was still there.
At the C level we could disable the statement caching, but cx_Oracle doesn't seem to support that.
We can work around the problem by modifying Oracle's get_table_description; where it says `cursor.execute("SELECT ....")` we can do 
```python
statement = "SELECT ..."
cache_key = get_unique_value()
cursor.prepare(statement, cache_key)
cursor.execute(statement)
```
Doing it this way is quite ugly, and really only makes sense for migrations; I'd like to have it controlled by an extra argument to `get_table_description`, which will have to be supported (ignored) by all other backends. If this sounds reasonable, I can prepare the patch.