代码之家  ›  专栏  ›  技术社区  ›  Maeaex1

使用Dash中的用户表单连接到OracleDB,并在回调之间共享连接

  •  0
  • Maeaex1  · 技术社区  · 5 年前

    我想在Dash(Plotly)中创建一个用户表单,这样就可以使用cx_Oracle连接到Oracle数据库。我能够毫无问题地连接到数据库并在回调中查询数据,但我不太确定如何在不同回调之间共享打开的连接以进行不同的查询,或者如何用注销按钮关闭连接。

    任何建议都非常感谢!谢谢!

    HTML布局

    app.layout = html.Div([
        html.Header([
            html.Img(src=comp_img, className='header-img'),
            html.H1('My Project')
        ]),
        html.Div([
            html.Form([
                dcc.Input(id='user-name', placeholder='Username', type='text'),
                dcc.Input(id='user-pw', placeholder='Passwort', type='password'),
                html.Button('Login', id='submit-button', type='submit', className='myButton'),
                html.Div(id='intermediate-value')
            ], className='LoginForm')
        ], className='container'),
    ])
    

    回拨:

    @app.callback (
        Output('intermediate-value', 'children'),
        [Input('submit-button', 'n_clicks')],
        [State('user-name', 'value'),
         State('user-pw', 'value')]
    )
    
    
    
    def connect_db(n_clicks, username, password):
        if n_clicks is None:
            return
        else:
            print(n_clicks)
    
        try:
            my_connection = cDB.user_input(username, password)
            qry = """SELECT * FROM my_table"""
            df = cDB.query_tbl(qry, my_connection)
    
            print(df)
    
        except Exception as e:
            print(e)
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   Yaakov Bressler    5 年前

    一旦你打开连接,你的应用程序就会被连接,直到你告诉它不是这样。我将创建一个单独的回调来实例化连接,然后为前端的每个查询创建额外的回调。

    关闭连接很简单: my_connection.close() 。可能是页面上的某个按钮。