On further thought it appears to me that defining the tables in a
controller function as shown in my post above would mean
that they are not available for access to other functions. And, hence, the
above may not be a good idea.
I would really appreciate an example of how I create tables based on user
input that are also available to other controller functions.
Thanks.
On Sunday, September 30, 2012 5:31:50 PM UTC-4, curiouslearn wrote:
>
> Hello,
>
> This is a question about recommended practice for doing the following:
>
> I want to create a web interface for creating a setup for new games. For
> example, the web interface will let me specify
> name of the game, number of teams etc. Based on this information I want to
> create new database tables for the game.
> Should the table definitions be given in a controller function, such as in
> the example below? Is that the recommended way
> to do this, or is there another way that you would recommend.
>
> Thank you.
>
> ***Controller function for creating tables***
>
> def createtables():
> if request.post_vars:
> experimentname = request.post_vars.experimentname
> numteams = int(float(request.post_vars.numteams))
> teams_tablename = "{0}_teams".format(experimentname)
> offers_tablename = "{0}_offers".format(experimentname)
> ardecisions_tablename = "{0}_ardecisions".format(experimentname)
> migrate_teamstablename = "{0}.table".format(teams_tablename)
> migrate_offerstablename = "{0}.table".format(offers_tablename)
> migrate_ardecisionstablename = "{0}.table".format(
> ardecisions_tablename)
> db.define_table(teams_tablename,
> Field('teamname', 'string', length=40, required=True,
> unique=True, notnull=True),
> Field('passwd', 'password'),
> Field('role', 'string', length=20, required=True,
> default='NA'),
> format = '%(teamname)s', migrate=migrate_teamstablename)
> # Table showing the ask amount of the first mover
> referencestring = 'reference {0}'.format(teams_tablename)
> db.define_table(offers_tablename,
> Field('round', 'integer'),
> Field('askamount', 'integer'),
> Field('payoff', 'integer'),
> Field('teamname_id', referencestring),
> migrate = migrate_offerstablename)
>
>
> # Table accept-reject decisions
> db.define_table(ardecisions_tablename,
> Field('round', 'integer'),
> Field('acceptorreject', 'string', length=2),
> Field('payoff', 'integer'),
> Field('teamname_id', referencestring),
> Field('offerer_id', referencestring),
> migrate = migrate_ardecisionstablename)
>
>
> teamnames = maketeamnames(numteams)
> for tname in teamnames:
> db[teams_tablename].update_or_insert(teamname=tname)
> db.experimentlist.insert(experimentname=experimentname)
> return dict()
>
>
>
>
--