Seite 1 von 1

Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 21:30
von sunshineh
Hallo

ich möchte mit Python die Stunde der Variable "temptime' in eine andere Variable abspeicher. Dies soll gleichzeitig auch der Name der Spalte meiner SQLite Tabelle sein.

Wie stell ich das am Besten an?

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:16
von __blackjack__
@sunshineh: Was ist denn das Problem dabei?

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:17
von sunshineh
Ich mach es nun so:
column = "c"+str(datetime.datetime.now().strftime("%H))

Nur wie bekommt ich in meinen SQLite Command nun diese Variable?
So klappt es jedenfalls nicht:

Code: Alles auswählen

sql_command = """ UPDATE tabname SET ? = ? +1 WHERE sensor  = 'PIR1',column, column

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:33
von __blackjack__
@sunshineh: Gar nicht würde ich sagen. Wenn man ”variable” Spaltennamen hat, ist das üblicherweise ein Zeichen für einen nicht so tollen Datenbankentwurf. Die Stunde ist offensichtlich etwas variables und nichts statisches, also würde man das als *eine* Spalte definieren und nicht als Spalte pro Stunde. Man hat dann einen Tabelleneintrag pro Stunde. Oder besser noch einen Eintrag pro Messung mit Zeitstempel. Später alles nach Stunden gruppieren und zusammen zu rechnen ist ja gerade eine der Stärken von Datenbanken.

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:45
von sunshineh
Danke für die Info. Aber grundsätzlich möchte ich das schon so, eben für jede Stunde eine eigene Spalte.

Nur weiß ich nicht, wie ich die Variable in mein SQL Command bekomme

Folgendes geht nicht ;-)

Code: Alles auswählen

sql_command = "UPDATE tabname SET ? = ? + 1 WHERE Sensor = 'PIR1' AND DayOfWeek = '1,2,3,4,5' "
cursor.execute(sql_command,(column,column))
Als Meldung erhalte ich folgendes:
cursor.execute(sql_command,(,(column,column))
splite 3.OperationalError: near "?": syntax error

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:52
von __blackjack__
@sunshineh: Platzhalter sind für Werte und Spaltennamen sind keine Werte. Der Wert für `DayOfWeek` sieht auch komisch aus.

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Dienstag 17. Juli 2018, 22:55
von sunshineh
Wie kann ich dann den Wert in den Spaltenname verwandeln? Die Variable "DayOfWeek" soll einfach zur ein Info-String sein.

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Mittwoch 18. Juli 2018, 07:25
von Sirius3
@sunshineh: auch wenn es Dir im Moment so vorkommt, dass die Stunde als Spaltenname eine gute Idee ist, beschreib doch mal Deine Aufgabe, was Du vorhast, aber nicht, wie Du denkst, dass es zu lösen wäre.

Re: Wert der aktuellen Stunde zuweisen

Verfasst: Mittwoch 18. Juli 2018, 11:33
von __blackjack__
@sunshineh: Statt die Stunden + Anzahl in Spalten zu kodieren, würde man die zum Beispiel so in einer eigenen Tabelle erfassen.

Code: Alles auswählen

CREATE TABLE sensor (
  id INTEGER PRIMARY KEY,
  "name" CHAR(10) NOT NULL,
  day_of_week CHAR(16) NOT NULL,
  CONSTRAINT sensor_con_1 UNIQUE ("name", day_of_week)
);

CREATE TABLE hour_counter (
  id INTEGER PRIMARY KEY,
  sensor_id INTEGER NOT NULL REFERENCES sensor (id),
  "hour" INTEGER NOT NULL CHECK ("hour" BETWEEN 0 AND 23),
  "count" INTEGER NOT NULL DEFAULT 0 CHECK ("count" >= 0),
  CONSTRAINT measurement_con_1 UNIQUE (sensor_id, "hour")
);
Wobei ich wie gesagt statt der `hour_counter`-Tabelle eher die Ereignisse mit einem Zeitstempel aufzeichnen würde. Aggregieren kann man später immer noch:

Code: Alles auswählen

CREATE TABLE "event" (
  id INTEGER PRIMARY KEY,
  sensor_id INTEGER NOT NULL REFERENCES sensor (id),
  "timestamp" TIMESTAMP NOT NULL DEFAULT (NOW)
);