Flask 2 request POST nützen

Django, Flask, Bottle, WSGI, CGI…
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Hallo,
Ich habe mal wieder ein Problem mit meinen Grafiken.
Mein Ziel ist es zum einen 3 Buttons zu haben wo ich die Länge meiner Grafik bestimmen kann und Gleichzeitig eine select Liste in der ich auswählen kann von welcher Messstation die Grafik sein soll. Mein Problem jetzt ist das ich momentan nur entweder oder habe. Wenn ich die Länge meiner Grafik auswähle und danach die Station auswählen möchte dann wird die Länge meiner Grafik wieder auf den Standard zurück gesetzt. Umgekehrt ist es das selbe, kann mir hier jemand weiter helfen.

Code: Alles auswählen

mess_id = "1"
if request.method == 'POST':
	if 'mess_id' in request.form:
            mess_id = request.form['mess_id']
            ask_length = "96"
            start_src_ask = 1
        else:
            mess_id = mess_id
            last = request.form['last'] 
            if last == 'tag':
               ask_length = "96"            
               start_src_ask = 1
            elif last == 'woche':
               ask_length = "672"
               start_src_ask = 1
            else:
               ask_length = "2880"
               start_src_ask = 1
                    
if start_src_ask == 1:
   plot_luft = [make_plot(mess_id, 'luftfeuchtigkeit', '1', ask_length, '2018-01-01_00:00', '2019-01-01_00:00')]
   plot_temp = [make_plot(mess_id, 'temperatur', '1', ask_length, '2018-01-01_00:00', '2019-01-01_00:00')]
   plot_erde = [make_plot(mess_id, 'erdfeuchtigkeit', '1', ask_length, '2018-01-01_00:00', '2019-01-01_00:00')]
   plot_lux = [make_plot(mess_id, 'lux', '1', ask_length, '2018-01-01_00:00', '2019-01-01_00:00')]

Code: Alles auswählen

<form method="post" >
        <div class="topnav">
          <button class="button" type="submit" value="tag" id="tag" name="last">Letzter Tag</button>

          <button class="button" type="submit" value="woche" id="woche" name="last">Letzte Woche</button>

          <button class="button" type="submit" value="monat" id="monat" name="last">Letzter Monat</button>
          <div class="topnav-right">
            <select name="mess_id" onchange='this.form.submit()'>
              <option value="1" selected>Station 1</option>
              <option value="2">Station 2</option>
              <option value="3">Station 3</option>
            </select> 
          </div>
        </div>
 </form> 
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Einrückungen passen überhaupt nicht. Eingerückt wird in Python immer mit 4 Leerzeichen pro Ebene. Das solltest Du so langsam nach 160 Posts hier draufhaben.

Du mußt die bereits eingetragenen Werte Deim Generieren Deiner <form> natürlich wieder eintragen. Aber den Teil zeigst Du ja gar nicht.
POST ist der falsche Modus, wenn Du nur eine Grafik abfragen willst.
Wenn man nur ein Bild aktualisieren will, würde man das heutzutage auch mit Javascript lösen.

Warum steht `mess_id` nicht immer in den form-Daten? Was soll das mess_id = mess_id??
`ask_length` sieht aus wie eine Zahl ist aber ein String?
Was soll eigentlich dieses `start_src_ask` das immer 1 ist und was sollen die plot_xxx-Listen, die immer nur ein Element enthalten?
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Du darfst halt nicht im <form> die erste Station grundsätzlich hart als Ausgewählt auszeichnen, sondern musst das als Wert auch wieder zurück ins Template bringen und da dann dynamisch das `selected`-Attribut setzen. Mit `last` hast Du dann um Grunde das gleiche Problem, wobei man das mit den Buttons so nicht so einfach lösen kann. Wobei ich auch ein kleines bisschen überrascht bin, dass das so überhaupt funktioniert und Du nicht für den Namen `last` immer alle drei Werte bekommst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Das mit dem einrücken Tut mir Leid das sieht hier nur so aus da ich es aus einem Größeren Code raus kopiert habe wo es in tieferen Ebenen drin ist. Im Orginalcode ist es Richtig Formatiert.

Ich verstehe nicht genau welchen Teil du hier meinst?

Ich will hier mit Post Parameter bekommen welche ich anschließend dazu nütze eine Grafik zu Generieren.

Das mess_id = mess_id ist wohl ein fehlgeschlagener Versuch die mess_id Variabel zu übertragen.

`ask_length` ist ein String da ich in ein SQL Statment keine Zahlen sondern nur Strings einfügen kann deshalb wird das hier als String behandelt.

start_src_ask ist die abfrage ob die Variabeln eingegeben wurden um nur dann die Grafiken zu Generieren und ist Standardmässig eine 0.

Die listen ist die in bokeh übliche Art eine Grafik zu erstellen. 'make_plot' hat 2 returns.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Wenn ich das selected weg lasse wird immernoch automatisch die erste Station wieder ausgewählt. Wie meinst du das ich soll dort dynamisch das select Atributt setzten. Soll ich dort über eine Variabel das ganze wieder Mitübertragen oder wie war das gemeint.
Warum sollte ich immer alle 3 Werte von den Buttons bekommen ich kann ja immer nur einen Nützen welcher dann den vorherigen Wert überschreibt.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Hypec hat geschrieben: Samstag 22. Juni 2019, 16:55 Im Orginalcode ist es Richtig Formatiert.
Das kann nicht sein, beim Kopieren werden aus 4 nicht 3 Leerzeichen!
Hypec hat geschrieben: Samstag 22. Juni 2019, 16:55 Ich will hier mit Post Parameter bekommen welche ich anschließend dazu nütze eine Grafik zu Generieren.
Ist schon klar, trotzdem ist POST die falsche Methode.
Hypec hat geschrieben: Samstag 22. Juni 2019, 16:55 `ask_length` ist ein String da ich in ein SQL Statment keine Zahlen sondern nur Strings einfügen kann deshalb wird das hier als String behandelt.
Das läßt erahnen, dass Du da sehr viel falsch machst. Man formatiert keine Werte in SQL-Strings!
Hypec hat geschrieben: Samstag 22. Juni 2019, 16:55 Die listen ist die in bokeh übliche Art eine Grafik zu erstellen. 'make_plot' hat 2 returns.
Auch wenn die Funktion zwei Rückgabewerte hat, macht eine einelementige Liste trotzdem keinen Sinn.

Nochmal zum eigentlichen Problem: bokeh benutzt schon Javascript und kann dynamisch Parameter abfragen. Nutze das auch.

Umgekehrt, wenn Du wirklich mit Formularen arbeiten willst, dann mußt Du sie dynamisch aus einem Template mit den bereits gesetzten Werten erzeugen. Möglicherweise auch mit versteckten <input>-Elementen.

@__blackjack__: bei submit-Buttons wird nur der Wert des Knopfes übertragen.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Ja ich habe das ganze kopiert und da dann ja elemente in der 3 Ebene 12 Leerzeichen drin sind habe ich diese von Hand an den den Rand gerückt. Dabei ist das ganze vlt. ein bisschen verutscht.

Was ist dann die Richtige Methode ich frage ja um es besser machen zu können.

Code: Alles auswählen

cur.execute("SELECT id, messstation_id, werttyp_id, timestamp, wert  from messung  WHERE messstation_id = ? ORDER BY timestamp DESC, werttyp_id ASC LIMIT ?;", [mess_id, length])
Wie soll ich dann hier diese Daten bekommen?

https://davidhamann.de/2018/02/11/integ ... lask-ajax/
Ich habe mich an diesem Toturial orientiert. Hast du eine andere Lösung wie ich das ganze in meine Webseite implementieren kann?

Wie soll ich ein verstecktes <input> Element verstehen?

Hier mal noch die Funktion mit der ich die Grafiken generiere. Falls es Verbesserungsvorschläge gibt sehr gerne.

Code: Alles auswählen

PLOTS = {
    'luftfeuchtigkeit': {
        'label1': 'Luftfeuchtigkeit innen',
        'label2': 'Luftfeuchtigkeit ausen',
        'ylabel': 'Luftfeuchtigkeit in %',
        'werttypone': 1,
        'werttyptwo': 3
    },
    'temperatur': {
        'label1': 'Temperatur innen',
        'label2': 'Temperatur ausen',
        'ylabel': 'Temperatur in °C',
        'werttypone': 2,
        'werttyptwo': 4
    },
    'erdfeuchtigkeit': {
        'label1': 'Erdfeuchtigkeit',
        'ylabel': 'Erdfeuchtigkeit',
        'werttypone': 5
    },
    'lux': {
        'label1': 'Lichtitensität(lux)',
        'ylabel': 'Lichtitensität in Lux',
        'werttypone': 6
    },
}

def make_plot(mess_id, datatype, ask_type, ask_length, start, end):
    time = []
    wertone = []
    werttwo = []
    
    plot_data = PLOTS[datatype]
    conn = sqlite3.connect('data.db')
    print ("Opened database " + datatype + " successfully")
    cur = conn.cursor()
    length = int(ask_length) * 6
    if ask_type == "1" :
        cur.execute("SELECT id, messstation_id, werttyp_id, timestamp, wert  from messung  WHERE messstation_id = ? ORDER BY timestamp DESC, werttyp_id ASC LIMIT ?;", [mess_id, length])
    elif ask_type == "2":
        cur.execute("SELECT id, messstation_id, werttyp_id, timestamp, wert  from messung WHERE timestamp BETWEEN ? AND ? ORDER BY timestamp DESC, werttyp_id ASC;", (start, end))

    rows = cur.fetchall()
    for row in rows:
        if plot_data['werttypone'] == row[2] in row:
            time.append(row[3])
            wertone.append(row[4])
        if 'werttyptwo' in plot_data:
            if plot_data['werttyptwo'] == row[2] in row:
                werttwo.append(row[4])
    conn.commit()
    conn.close()

    time.reverse()
    wertone.reverse()
    if 'werttyptwo' in plot_data:
        werttwo.reverse()
    
    datetimes = [datetime.datetime.strptime(d, '%Y-%m-%d %H:%M') for d in time]
    df = pd.DataFrame(time, columns=['date'])
    df.loc[:, 'date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M')

    plot = figure(plot_height=300, x_axis_type='datetime', sizing_mode='scale_width', tools="save", toolbar_location=None)
    source = ColumnDataSource(data=dict( date=df['date'], wertone=wertone))
    plot1 = plot.line('date', 'wertone', line_width=2, source=source, legend=plot_data['label1'])
    if datatype == 'luftfeuchtigkeit' or datatype == 'temperatur':
        source = ColumnDataSource(data=dict( date=df['date'], wertone=wertone, werttwo=werttwo))
        plot2 = plot.line('date', 'werttwo', line_width=2, source=source, legend=plot_data['label2'], color="firebrick")

    hover = HoverTool(
        tooltips=[('Uhrzeit:', '@date{%d.%m.%Y %H:%M}'), (plot_data['label1'], '@wertone{0.00}') ],
        formatters={'date'      : 'datetime',},
        mode='vline'
    )
    
    if datatype == 'luftfeuchtigkeit' or datatype == 'temperatur':
        hover.renderers=[plot2]
        hover.tooltips=[('Uhrzeit:', '@date{%d.%m.%Y %H:%M}'), (plot_data['label1'], '@wertone{0.00}'), (plot_data['label2'], '@werttwo{0.00}') ]
    else:
        hover.renderers=[plot1]
    
    plot.add_tools(hover)
    plot.xaxis.formatter=DatetimeTickFormatter( hours=["%H:%M"], days=["%d.%m.%Y %H:%M"], months=["%d.%m.%Y %H:%M"], years=["%d.%m.%Y %H:%M"])
    plot.xaxis.major_label_orientation = pi/5
    plot.yaxis.axis_label = plot_data['ylabel']
    plot.legend.location ="top_left"
    plot.legend.click_policy="hide"
    
    script, div = components(plot)
    return script, div
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Also doch eher, wie ich zuerst vermutet habe. Dass asktype ein String ist, ist eher eine schlechte Wahl der Typen, bzw. ganz überflüssig, weil man das mit speziellen Werten (None) für start, bzw. end auch erledigen könnte.
Dass `ask_length` ein String ist, ist total falsch, da Du ihn ja selbst in ein int umwandelst.
Beim SELECT solltest Du bereits nach den wert-Typen filtern. Das magische *6 bei der Länge würde dann auch anders sein.

Cursor-Objekte sind Iteratoren über die Ergebniseinträge, das fetchall ist also unnötig.
Weißt Du was `plot_data['werttypone'] == row[2] in row` bedeutet? Dann denk nochmal darüber nach und bring das in Ordnung.

Das commit ist unnötig.
Das Datum sollte Deine Plot-Routine doch selbst machen und was Du da mit dem Dataframe, entzieht sich meinem Verständnis.


Statt Teile zu posten, die Du dann anders einrücken willst, solltest Du alle relevanten Teile des Codes zeigen.
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke das obere alles mit asktype und asklength habe ich alles behoben.

Was soll ich dann statt fetchall machen kann ich mit einer for schleife direkt durch einen Cursor gehen?
Ja ich weiß was `plot_data['werttypone'] == row[2] in row` bedeutet. Was meinst du ist daran falsch soll ich dem row einen anderen Namen geben oder was ist das Problem.

commit hab ich entfernt.
Was genau meinst du mache ich zu viel bzw. falsch bei dem Datum? Und was ist unklar bei dem Rest?

Oke hier dann die volle Version von meinem Code:

Code: Alles auswählen

@app.route('/dashboard/<id>', methods=['GET', 'POST'])
def dashboard(id):
    if 'username' in session:
        start = "2018-01-01_00:00"
        end = "2019-01-01_00:00"
        data_one = ""
        datatype = ""
        ask_length = 0

        plot_luft = plot_temp = plot_erde = plot_lux = plot_luft_z = plot_temp_z = plot_erde_z = plot_lux_z = []
        start_src = 0
        start_src_ask = 0

        mess_id = "1"
        if request.method == 'GET':
            ask_length = 96
            start_src_ask = 1
        elif request.method == 'POST':
            if 'mess_id' in request.form:
                mess_id = request.form['mess_id']
                ask_length = 96
                start_src_ask = 1
            elif 'last' in request.form:
                last = request.form['last']
                if last == 'tag':
                    ask_length = 96            
                    start_src_ask = 1
                elif last == 'woche':
                    ask_length = 672
                    start_src_ask = 1
                else:
                    ask_length = 2880
                    start_src_ask = 1
            elif 'date' in request.form:
                ask_length = 1
                start_date = request.form['start_date']
                start = start_date + "_00:00"
                end_date = request.form['end_date']
                end = end_date + "_00:00"

                data_one = 2
                start_src = 1
                
                #letzter tag
                datatype = ""
                start_src_ask = 1
            

        if start_src_ask == 1:
            plot_luft = [make_plot(mess_id, 'luftfeuchtigkeit', ask_length, None, None)]
            plot_temp = [make_plot(mess_id, 'temperatur', ask_length, None, None)]
            plot_erde = [make_plot(mess_id, 'erdfeuchtigkeit', ask_length, None, None)]
            plot_lux = [make_plot(mess_id, 'lux', ask_length, None, None)]
        
        if start_src == 1:
            plot_luft_z = [make_plot(mess_id, 'luftfeuchtigkeit', 96, start, end)]
            plot_temp_z = [make_plot(mess_id, 'temperatur', 96, start, end)]
            plot_erde_z = [make_plot(mess_id, 'erdfeuchtigkeit', 96, start, end)]
            plot_lux_z = [make_plot(mess_id, 'lux', 96, start, end)]

            plot_luft = [make_plot(mess_id, 'luftfeuchtigkeit', 96, None, None)]
            plot_temp = [make_plot(mess_id, 'temperatur', 96, None, None)]
            plot_erde = [make_plot(mess_id, 'erdfeuchtigkeit', 96, None, None)]
            plot_lux = [make_plot(mess_id, 'lux', 96, None, None)]
        
        return render_template('dashboard.html', mess_id=mess_id, plot_luft=plot_luft, plot_temp=plot_temp, plot_erde=plot_erde, plot_lux=plot_lux, data_one=data_one, plot_luft_z=plot_luft_z, plot_temp_z=plot_temp_z, plot_erde_z=plot_erde_z, plot_lux_z=plot_lux_z)     
    else:
        return redirect(url_for('index'))

def make_plot(mess_id, datatype, ask_length, start, end):
    time = []
    wertone = []
    werttwo = []
    
    plot_data = PLOTS[datatype]
    conn = sqlite3.connect('data.db')
    print ("Opened database " + datatype + " successfully")
    cur = conn.cursor()
    if plot_data['werttyptwo'] != None:
        length = ask_length * 2
    else:
        length = ask_length 

    if start == None or end == None :
        cur.execute("SELECT id, messstation_id, werttyp_id, timestamp, wert  from messung  WHERE messstation_id = ? AND werttyp_id = ? OR werttyp_id = ?ORDER BY timestamp DESC, werttyp_id ASC LIMIT ?;", [mess_id, plot_data['werttypone'], plot_data['werttyptwo'], length])
    else:
        cur.execute("SELECT id, messstation_id, werttyp_id, timestamp, wert  from messung WHERE timestamp BETWEEN ? AND ? ORDER BY timestamp DESC, werttyp_id ASC;", (start, end))

    rows = cur.fetchall()
    for row in rows:
        if plot_data['werttypone'] == row[2] in row:
            time.append(row[3])
            wertone.append(row[4])
        if plot_data['werttyptwo'] == row[2] in row:
            werttwo.append(row[4])
    conn.close()

    time.reverse()
    wertone.reverse()
    if 'werttyptwo' in plot_data:
        werttwo.reverse()
    
    datetimes = [datetime.datetime.strptime(d, '%Y-%m-%d %H:%M') for d in time]
    df = pd.DataFrame(time, columns=['date'])
    df.loc[:, 'date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M')

    plot = figure(plot_height=300, x_axis_type='datetime', sizing_mode='scale_width', tools="save", toolbar_location=None)
    source = ColumnDataSource(data=dict( date=df['date'], wertone=wertone))
    plot1 = plot.line('date', 'wertone', line_width=2, source=source, legend=plot_data['label1'])
    if datatype == 'luftfeuchtigkeit' or datatype == 'temperatur':
        source = ColumnDataSource(data=dict( date=df['date'], wertone=wertone, werttwo=werttwo))
        plot2 = plot.line('date', 'werttwo', line_width=2, source=source, legend=plot_data['label2'], color="firebrick")

    hover = HoverTool(
        tooltips=[('Uhrzeit:', '@date{%d.%m.%Y %H:%M}'), (plot_data['label1'], '@wertone{0.00}') ],
        formatters={'date'      : 'datetime',},
        mode='vline'
    )
    
    if datatype == 'luftfeuchtigkeit' or datatype == 'temperatur':
        hover.renderers=[plot2]
        hover.tooltips=[('Uhrzeit:', '@date{%d.%m.%Y %H:%M}'), (plot_data['label1'], '@wertone{0.00}'), (plot_data['label2'], '@werttwo{0.00}') ]
    else:
        hover.renderers=[plot1]
    
    plot.add_tools(hover)
    plot.xaxis.formatter=DatetimeTickFormatter( hours=["%H:%M"], days=["%d.%m.%Y %H:%M"], months=["%d.%m.%Y %H:%M"], years=["%d.%m.%Y %H:%M"])
    plot.xaxis.major_label_orientation = pi/5
    plot.yaxis.axis_label = plot_data['ylabel']
    plot.legend.location ="top_left"
    plot.legend.click_policy="hide"
    
    script, div = components(plot)
    return script, div
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Hypec hat geschrieben: Samstag 22. Juni 2019, 20:02 Ja ich weiß was `plot_data['werttypone'] == row[2] in row` bedeutet. Was meinst du ist daran falsch soll ich dem row einen anderen Namen geben oder was ist das Problem.
Dann hast Du es nicht verstanden. Erklär doch mal was Python da in welcher Reihenfolge prüft.

Du mußt alles, was Du über die Form an Parametern bekommst auch wieder in dashboard.html als Defaultwerte in die Form-Elemente eintragen.

POST ist die falsche Methode.
In `request.form` sollten mess_id, last und start_date/end_date gesetzt sein. Das mit einer if-elif-Kaskade abzufragen ist also unsinnig.

Das mit den plot-Listen mit jeweils einem Element ist immer noch quatsch.
Ich habe keinen Pfad gefunden, in dem start_src_ask nicht auf 1 gesetzt wird.

Was soll eigentlich mit der id passieren, die Du als Argument bekommst?

Code: Alles auswählen

@app.route('/dashboard/<id>', methods=['GET', 'POST'])
def dashboard(id):
    mess_id = request.form.get('mess_id', 1)
    last = request.form.get('last,', request.form.get('last_selected', 'monat'))
    start_date = end_date = None

    if last == 'tag':
        ask_length = 96            
    elif last == 'woche':
        ask_length = 672
    elif last == 'monat':
        ask_length = 2880
    elif last == 'date':
        ask_length = 96
        start_date = request.form.get('start_date', "2018-01-01_00:00")
        end_date = request.form.get('end_date', "2019-01-01_00:00")

    plots = [
        make_plot(mess_id, quantity, ask_length, start_date, end_date)
        for quantity in PLOTS
    ]
    return render_template('dashboard.html', form=request.form, plots=plots, mess_ids=['1', '2', '3'])
und sowas wie dashboard.html:

Code: Alles auswählen

<form method="get" >
        <div class="topnav">
          <input type="hidden" name="last_selected" value="{{form.last}}">
          <button class="button" type="submit" value="tag" id="tag" name="last">Letzter Tag</button>
          <button class="button" type="submit" value="woche" id="woche" name="last">Letzte Woche</button>
          <button class="button" type="submit" value="monat" id="monat" name="last">Letzter Monat</button>
          <div class="topnav-right">
            <select name="mess_id" onchange='this.form.submit()'>
            {%for mess_id in mess_ids%}
              <option value="{{mess_id}}" {%if mess_id == form.mess_id%}selected{%endif%}>Station {{mess_id}}</option>
            {%endfor%}  
            </select> 
          </div>
        </div>
 </form> 
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Die Liste wird durch laufen und in jeder row wird geprüft ob das die 2 Spalte den selben Inhalt hat wie der Punkt 'werttypone' in dem dict PLOTS hat.

Oke das mit dem start_src_ask ist echt überflüssig.

Das was du mir hier geschickt hat klappt irgendwie nicht wenn ich einen der Buttons nütze verschwinden alle 4 graphen. Genauso das speichern der mess_id klappt auch nicht. Sie wird immernoch immer auf Station 1 zurück gesetzt.

Die id soll später checken welche Messstationen dem eingelogten User gehören und ihm nur diese dann zur Verfügung stellen.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist ja auch nur eine Skizze. Was hast Du denn nun konkret an Code ausprobiert?
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Nope, das passiert da nicht bei ``plot_data['werttypone'] == row[2] in row``. Der Vergleich mit ``==`` passiert nicht für jedes Element in `row` sondern nur einmal. Als erstes wird aber das ``row[2] in row`` ausgewertet was *immer* `True` ist, denn natürlich ist das dritte Element aus `row` in `row` enthalten. Also ist das das gleiche wie ``plot_data['werttypone'] == True``. Da man nicht mit literalen Wahrheitswerten vergleicht, weil dabei sowieso nur wieder ein Wahrheitswert heraus kommt, ist das äquivalent zu einfach nur ``plot_data['werttypone']`` als Bedingung.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Naja aber es Funktioniert ja ohne diese abfrage auch nicht. Und die for schleife wird ja für jede row in der Liste neu durchlaufen und so oft wird dann doch auch die if ausgeführt oder liege ich hier falsch?
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Also bei last kommt immer None als Wert raus also das klappt irgendwie nicht mit der get method.
Die Eingabe Methode Date gehört eigentlich auch gar nicht zu den last Abfragen sondern soll separat davon eigene graphen generieren.
Und wie schon gesagt die select versteh ich in der Version jetzt auch nicht mehr so ganz und kann nur sagen das sie nicht mehr wie die alte erreicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Ja, das ``if`` wird für jede `row` ausgeführt, aber die Bedingung ist halt total unsinnig formuliert und da Du nicht verstanden hast was die macht ist das halt nur Zufall das es so funktioniert wie Du das wolltest. Es wäre schon sinnvoll das Du verstehst was dieser Ausdruck tatsächlich macht und dann den unsinnigen Teil entfernst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Eine row sieht ja so aus :
ID, mess_id, werttyp_id, timestamp, Wert
34, 1, 4, 2019-06-22.14:15(genaue Formatierenung weiß ich gerade nicht), 24,6

plot_data['werttypone'] = 4
Also die Abfrage sieht dann so aus:
If 4 = 4 in row:
Also kann sein das ich echt auf dem Schlauch stehe aber ich sehe nicht was falsch ist.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt doch in eigenen Worten beschreiben können, was „4 == 4 in row” bedeutet.
Benutzeravatar
__blackjack__
User
Beiträge: 13114
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Mir fällt gerade auf, dass meine Beschreibung falsch war. Sinnvoller wird die Bedingung dadurch aber nicht und richtiger auch nicht. Das ist ja eine verkettete Bedingung, also ``4 == row[2] in row`` ist das gleiche wie ``4 == row[2] and row[2] in row``. Der Teil nach dem ``and`` ist IMMER wahr, denn natürlich ist das 3. Element aus `row` in `row` enthalten. Bleibt ``4 == row[2]`` als sinnvoller Teil der Bedingung übrig.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Oke stimmt so ist es verständlich habe es jetzt richtig gemacht.

Hab leider aber noch keine dynamische Lösung für die anderen Probleme gefunden.
Antworten