как печатать в новой строке в приложении Dash

#python #plotly-dash

Вопрос:

Я создал приложение dash, в котором мне нужно распечатать последние значения из базы данных. при извлечении данных он отображается в виде списка кортежей, поэтому мне нужно отформатировать его, чтобы напечатать данные, разделенные новой строкой. Я не смог достичь этого прямо сейчас с помощью своего кода. так что любые предложения будут очень полезны. Заранее спасибо.

Ниже приведен поток

Я получаю данные в виде списка кортежей [(2.27085, 2.73255,1.0),(2.27085, 2.73255,2.0),(2.27085, 2.73255,3.0)] , у меня есть метки для каждого значения в кортеже ['value1', 'value2', 'SNO']

Я объединяю их, чтобы создать словарь, который приведет к чему-то вроде этого "{'value1': 2.27085, 'value2': 2.73255, 'SNO': 1.0}

затем я преобразую словарь в строку, чтобы удалить из него { }.

затем я объединяю все строки вместе, добавляя новую строку в конце каждой строки вместе с меткой времени, поэтому, когда я печатаю в приложении, это должно выглядеть так

 21:40:41

'value1': 2.27085, 'value2': 2.73255, 'SNO': 1.0

'value1': 2.27085, 'value2': 2.73255, 'SNO': 2.0

'value1': 2.27085, 'value2': 2.73255, 'SNO': 3.0
 

вместо этого я получаю это в своем приложении dash

 21:51:12
'value1': 2.27085, 'value2': 2.73255, 'SNO': 1.0Br(None)'value1': 2.27085, 'value2': 2.73255, 'SNO': 2.0Br(None)'value1': 2.27085, 'value2': 2.73255, 'SNO': 3.0Br(None)
 

вот код, который я попробовал

 import datetime
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
from app import app

printing = html.P(['CONSOLE', html.Br()])

app.layout = html.Div([
    html.Div([
        dcc.Interval(id="interval", interval=0.9 * 1000, n_intervals=0),
        html.Div(id="content"),
    ])
])


def flask_logger():
    log_mssg = ''
    values = [(2.27085, 2.73255, 1.0), (2.27085, 2.73255, 2.0), (2.27085, 2.73255, 3.0)]
    col_name_list = ['value1', 'value2', 'SNO']
    current_time = datetime.datetime.now().strftime('%H:%M:%S')
    if (values is not None and len(values) != 0) and (col_name_list is not None and len(col_name_list) != 0):
        for i in values:
            #concatenate the strings together with a new line at the end
            log_mssg = log_mssg str(dict(zip(col_name_list, i))) str(html.Br())
            log_mssg = log_mssg.replace('{', '')
            log_mssg = log_mssg.replace('}', '')
        current_time = [current_time]   [html.Br()]   [log_mssg]
        #print(current_time)
        return current_time
    return 'none'


@app.callback(
    Output("content", "children"),
    Input("interval", "n_intervals"),
    State("content", "children"),
)
def update_output(interval, content):
    if not content:
        return ['']
    x = flask_logger()
    return content   x   [html.Br()]


if __name__ == "__main__":
    app.run_server(debug=True)

 

К вашему сведению, я удалил часть базы данных и добавил некоторые данные, имитирующие действие, чтобы любой мог запустить код напрямую.

Комментарии:

1. Могу ли я использовать формат JSON здесь?

Ответ №1:

Всякий раз, когда я хочу вернуть итерацию с каждым элементом в отдельной строке, я использую html.P() . Чтобы вы могли переписать свою flask_logger функцию для использования:

 ...
    if (values is not None and len(values) != 0) and (col_name_list is not None and len(col_name_list) != 0):
        log_mssg = [html.P(log_mssg   str(dict(zip(col_name_list, i))).replace('{', '').replace('}', '')) for i in values]
        current_time = [html.P(current_time)]   log_mssg
...
 

Комментарии:

1. Это полностью работает, но я получаю сообщение об ошибке после запуска скрипта в течение некоторого времени, в котором говорится dash_renderer.v1_9_1…140379.dev.js:93348 POST http://127.0.0.1:8050/_dash-update-component net::ERR_CONNECTION_TIMED_OUT , а также подробно [Violation] 'setInterval' handler took 350ms излагается любая идея, почему это происходит

2. Я не уверен, но это как-то связано с вашим dcc. Компонент интервала. Возможно, документация на dash.plotly.com/dash-core-components/interval будет полезно. Если нет, то, возможно, это просто как-то связано с тем, что ваш локальный хост по какой-то причине отключился. Если вы сможете развернуть его и протестировать там, мы могли бы узнать больше.