Python ver(debug=True) 康涅狄格州关闭

Python ver(debug=True) 康涅狄格州关闭,python,pandas,plotly-dash,Python,Pandas,Plotly Dash,我认为问题来自于您的函数的失效状态。如果未单击submit\u entry按钮,默认情况下,您的函数将返回None。如果将raise dash.exceptions.PreventUpdate移出一个缩进级别,则未单击该按钮时,它将成为函数的默认行为 我认为这应该行得通,但我偶尔会遇到一些更新方面的问题。如果遇到这种情况,可以始终使用表数据的状态,并将其作为默认值返回 import dash import dash_core_components as dcc import dash_html_

我认为问题来自于您的函数的失效状态。如果未单击
submit\u entry
按钮,默认情况下,您的函数将返回
None
。如果将
raise dash.exceptions.PreventUpdate
移出一个缩进级别,则未单击该按钮时,它将成为函数的默认行为

我认为这应该行得通,但我偶尔会遇到一些更新方面的问题。如果遇到这种情况,可以始终使用表数据的
状态
,并将其作为默认值返回

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import dash_table
import dash_table.FormatTemplate as ft
import pandas as pd
import sqlite3
from datetime import datetime as dt

conn = sqlite3.connect('BI_Requests.db')
cur = conn.cursor()
#cur.execute("DELETE FROM bi_requests")
cur.execute("CREATE TABLE IF NOT EXISTS bi_requests (id_num integer, "
                "email text, request_title text, request_details text, due_date date, date_requested date)")
conn.commit()


df = pd.read_sql("SELECT email, request_title, request_details, due_date, date_requested FROM bi_requests;", conn, parse_dates=['due_date','date_requested'])
df['due_date'] = pd.to_datetime(df['due_date']).dt.date
df['date_requested'] = pd.to_datetime(df['date_requested']).dt.date
df['diff'] = (df['date_requested']-df['due_date']).dt.days

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    html.H4('BI Requests'),
    html.Label('Email'),
    dcc.Input(value='', type='email', autoFocus=True, inputMode='email', id='enter_email'),
    html.Label('Request Title'),
    dcc.Input(value='', type='text', id='enter_title'),
    html.Label('Request Details'),
    dcc.Input(value='', type='text', id='enter_details'),
    html.Label('Due Date'),
    dcc.DatePickerSingle(id='enter_due_date'),
    html.Br(),
    html.Br(),
    html.Button('Submit', id='submit_entry'),
    html.Br(),
    html.Br(),
    #generate_table(df),
html.Div([
    dash_table.DataTable(id='data-table',
        columns=[
            {'name':'Email', 'id': 'email' , 'type':'text', 'selectable':True, 'editable':False},
            {'name':'Request Title', 'id': 'request_title' , 'type':'text', 'selectable':True, 'editable':True},
            {'name':'Request Details', 'id': 'request_details' , 'type':'text', 'selectable':True, 'editable':True},
            {'name':'Due', 'id': 'due_date' , 'type':'datetime', 'selectable':True, 'editable':True},
            {'name':'Requested', 'id': 'date_requested' , 'type':'datetime', 'selectable':True, 'editable':False},
            {'name':'Diff', 'id': 'diff' , 'type':'numeric', 'selectable':True, 'editable':False}],
        style_as_list_view=True,
        style_cell={'padding': '5px', 'whiteSpace':'normal', 'height':'auto', 'textAlign':'left'},
        style_header={
                    'backgroundColor': 'navy',
                    'color': 'white',
                    'fontWeight': 'bold'},
        style_data_conditional=[
        {
            'if': {'row_index': 'odd'},
            'backgroundColor': 'rgb(248, 248, 248)'
        }, 
        {
            'if':{
                'filter_query':'{diff} < 4',
            },
            'backgroundColor':'#E6B0AA'
        },
        {
            'if':{
                'filter_query':'{diff} >=4 && {diff} < 14',
            },
            'backgroundColor':'#F9E79F'
        },
        {
            'if':{
                'filter_query':'{diff} > 14',
            },
            'backgroundColor':'#A9DFBF'
        },
    ],  
        style_data={'whiteSpace':'normal', 'height':'auto'},
        style_table={'height': '300px', 'overflowY': 'auto'},
        fixed_rows={'headers': True},
        data=df.to_dict('records'),
        editable=True,
        filter_action="native",
        sort_action="native",
        sort_mode="multi",
        row_selectable="multi",
        row_deletable=True,
        selected_columns=[],
        selected_rows=[],
        page_action="native",
        page_current= 0,
        page_size= 100,
        hidden_columns=['diff']
        )
]),
])

@app.callback(
    Output('data-table', 'data'),
    [Input('submit_entry', 'n_clicks')],
    [Input('data-table', 'derived_virtual_data')],
    [
        State('enter_email', 'value'),
        State('enter_title', 'value'),
        State('enter_details', 'value'),
        State('enter_due_date', 'date')
    ],
) 

def entry_to_db(self, submit_entry, enter_email, enter_title, enter_details, enter_due_date):   
    conn = sqlite3.connect('BI_Requests.db')
    cur = conn.cursor()

    if submit_entry:

        sample_entry = [
            {
                'email':enter_email,
                'request_title':enter_title , 
                'request_details':enter_details,
                'due_date': enter_due_date, 
                'date_requested' : dt.now()
            }
        ]
        insert_entry = cur.execute("INSERT INTO bi_requests (email, request_title, request_details, due_date, date_requested) "
                                                "VALUES (?, ?, ?, ?, ?)", (enter_email, enter_title, enter_details, enter_due_date, dt.now()), sample_entry)

        conn.commit()

        df = pd.read_sql("SELECT email, request_title, request_details, due_date, date_requested FROM bi_requests;", conn, parse_dates=['due_date','date_requested'])
        df['due_date'] = pd.to_datetime(df['due_date']).dt.date
        df['date_requested'] = pd.to_datetime(df['date_requested']).dt.date
        df['diff'] = (df['date_requested']-df['due_date']).dt.days 
        data=df.to_dict('records')

        return data

        raise dash.exceptions.PreventUpdate

if __name__ == '__main__':
    app.run_server(debug=True)
    conn.close()