You could always do the db.define_table calls specific to the tables
that are in the schema:
def define_schema1():
db.define_table("table1")
# and so forth
def define_schema1():
db.define_table("tablea")
# and so forth
# later on... (after changing the schema)
if current_schema == "schema1":
define_schema1()
elif current_schema == "schema2":
define_schema2()
You would have to be very careful then to only make the right calls
given the schema otherwise you would end up with an error.
Also be careful with the schema changing - be on the lookout for SQL
injection.