As well as defining your table by adding columns to a web.database.object.Table object you can define your own class derived from a web.database.object.Table object instead. Here is the same database defined above but created using classes instead:
import web, web.database, web.database.object
connection = web.database.connect(type="mysql", database="MyDatabase")
cursor = connection.cursor()
class Person(web.database.object.Table):
def setup(self):
self.addColumn(web.database.object.String(name="firstName"))
self.addColumn(web.database.object.String(name="surname"))
self.addMultiple(name="addresses", foreignTable="Address")
class MyDatabase(web.database.object.Database):
def setup(self):
self.addTable(Person())
myDatabase = MyDatabase()
myDatabase.init(cursor)
Whilst this may look more complicated it is a more object oriented solution and allows you to build complex table objects with increased functionaility by defining your own objects. For example you could override the _relatedTableName() method of both tables to have your own table name created for multiple join tables.