I am integrating with a legacy database running MSSQL. The table names are 
in camel case, so the global settings table is called GlobalSettings. Here 
is the table definition as I have it:

db.define_table('GlobalSettings',
    Field('SettingName', length=255),
    Field('SettingValue', length=255),
    Field('Setting_PKey', 'id'),
    migrate=False
)

Doing a select on this table would look like this:
db().select(db.GlobalSettings.ALL)

I plan to eventually rename the tables and fields once my web2py application 
takes over the current C# version of the project. My question is, would it 
be possible to add an argument to define_table() and Field() that would 
allow you to give a different name to the tables and fields for use in later 
code? Maybe like an alias= attribute or something?

With something like that, I could apply the alias argument to each table and 
field definition, then when I'm ready to rename the tables and fields in the 
database, all I have to do is change the names in the db.py file. Otherwise, 
I would have to change every line that uses the db object. Using an alias 
argument would allow me to call and refer to the table or field by whatever 
name I want. So my table definition would look like this:

db.define_table('GlobalSettings',
    Field('SettingName', length=255, alias='name'),
    Field('SettingValue', length=255, alias='value'),
    Field('Setting_PKey', 'id', alias='id'),
    migrate=False,
    alias='global_settings'
)

Then a select would look like this:
db().select(db.global_settings.ALL)

And when I change the name of the table and fields in the database, my table 
definition would be changed to look like this:

db.define_table('global_settings',
    Field('name', length=255),
    Field('value', length=255)
)

No changes to any other code would be necessary, as I would already be using 
db.global_settings.name to refer to the GlobalSettings.SettingName field. 
You will notice that in the last table definition above, I have removed 
migrate=False, as the table can now be controlled using web2py's built in 
migration functions.

I don't know how difficult a task it would be to add this functionality, but 
it could go a long way into allowing web2py to integrate with legacy 
databases, and optionally take over completely from the legacy application 
using the legacy database.

Reply via email to