web2py - 选择数据库

web2py - Choose DB

我有两个具有相同表的数据库(Oracle 和 MSSQL)。登录应用程序时可以选择其中一个数据库。

view.html

<form action="{{=URL('test?dbs=')}}">
    <label for="dbs">Choose a DB:</label>
    <select name="dbs">
      <option value="oracle">Oracle</option>
      <option value="mssql">MSSQL</option>    
    </select> 
    <input type="submit" value="Submit">
</form>

{{=db_choose}}

controller.py

def test():
    db_choose = request.vars.dbs
    if db_choose == "oracle":
        db = DAL('oracle://username/password@test')
        return dict(db_choose = db)
    elif db_choose == "mssql":
        db = DAL('mssql://username:password@localhost/test')
        return dict(db_choose = db_choose)
    else:
        return dict(db_choose = db_choose)
    return dict(db_choose = db_choose)

您需要在请求之间保留选择,因此可以将选择存储在会话中。

在模型文件中(例如,db.py):

db = DAL('oracle://username/password@test' if session.db == 'oracle' \
         else 'mssql://username:password@localhost/test')

在控制器中:

def test():
    session.db = request.vars.dbs or 'mssql'
    return dict(db_choose = session.db)

如果您希望选择在单个会话之后持续存在,请考虑将每个用户的选择存储在他们的 auth_user 记录中(如果有登录),或者将其存储在浏览器中的 localStorage 中.