Seite 1 von 1

Filter bei MySql setzen

Verfasst: Mittwoch 29. Mai 2019, 22:46
von Duesentrieb
Hallo,

ich möchte eine Datenbankabfrage machen und dabei den Filter des aktuellen Jahres setzen.

Code: Alles auswählen

import MySQLdb as mdb
import time
import datetime


x_jahr = time.strftime("%Y") 


con = mdb.connect('192.168.0.200', 'root', '', 'Steuerung');
print "x_jahr: ", x_jahr
with con:
    cur = con.cursor()
    cur.execute('SELECT Jahr, Pumpe_an, Solar_an, Dach_min, Dach_max, Prozessor_min, Prozessor_max, Sonstiges FROM Statistik where Jahr = (%s)', (x_jahr))
    result = cur.fetchall()
    print "result: ", result
und erhalte diesen Fehler:

query = query % args
TypeError: not all arguments converted during string formatting

Wie muss ich meine Variable umformatieren?

Re: Filter bei MySql setzen

Verfasst: Mittwoch 29. Mai 2019, 22:54
von sparrow
Soi wie ich das sehe, ist der SQL-Ausdruck nicht korrekt. Das %s darf nicht in Klammern sterhen.

Dafür müsste der 2. Parameter von exeucute iterierbar sein - also in deinem Fall meinst du eine Liste. Etwas in Klammern zu setzen, macht es aber noch nicht zu einer. Elemente mit Kommata getrennt in Klammern sind jedoch eine Liste. (x_jahr,).

Re: Filter bei MySql setzen

Verfasst: Mittwoch 29. Mai 2019, 23:07
von Duesentrieb
Ich habe die Klammer weggenommen. Das hat aber leider nichts gebracht

Re: Filter bei MySql setzen

Verfasst: Mittwoch 29. Mai 2019, 23:28
von __blackjack__
@Duesentrieb: Das zweite Argument von `executable()` muss eine Sequenz mit so vielen Elementen sein wie Platzhalter in der SQL-Anweisung sind. Du hast da ``(x_jahr)`` stehen, was das selbe ist wie ``x_jahr``, weil die Klammern da nix bedeuten. Und wenn ``x_jahr`` eine Zeichenkette mit vier Zeichen ist, dann ist das eine Sequenz mit vier Elementen – eines pro Ziffer – da ist aber nur ein Platzhalter. Du musst da also entweder ein Tupel übergeben ``(x_jahr,)`` – man beachte das KOMMA!!!, oder eine Liste ``[x_jahr]``.

Re: Filter bei MySql setzen

Verfasst: Donnerstag 30. Mai 2019, 08:27
von Duesentrieb
He, super
Es wundert mich nur dass es bis vor ein paar Wochen noch ohne das Komma funktioniert hat

Danke!

Re: Filter bei MySql setzen

Verfasst: Donnerstag 30. Mai 2019, 11:57
von __blackjack__
@Duesentrieb: Das kann nicht sein. Diese API hat seit 2002 den Status „Final“, da hat sich sicher nicht in den letzten paar Wochen so etwas grundlegendes bei einer Implementierung geändert.