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()