I used to have a few problems like you describe, but then I decided to make use of Sqlite. It is so easy to set it up and then tear down - and throw it away!
So, now when I first start to write an app, I use Sqlite initially. After defining my tables, I spend some extra time adding some test data. I normally use 'populate' for this. Whenever I make big changes to my schema, I then simply delete everything in the Databases directory. Then when I next run my app, it re-creates everything from scratch. It's so quick and easy and I get nice new shiny data without any gremlins lurking. Once I am happy that the schema is stable and my 'proof of concept' is working, then I move it to the real DB that I am targeting. Normally the DB transition is surprisingly easy - which is one of the key benefits of web2py. Henceforth I do not usually have any problems with the smaller migrations. I hope this can also be helpful for you. Regards, David