Daten in phpMyAdmin SQL Datenbank schreiben

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Feuerrabe
User
Beiträge: 2
Registriert: Freitag 18. Dezember 2020, 12:19

Hi
Nachdem ich es geschafft habe Daten in meine Datenbank mit Hilfe folgendes Python-Programm:
import requests
import pymysql
from datetime import datetime

r = requests.get('https://api.awattar.at/v1/marketdata')
data = r.json()
for event in data['data']:
Time = (event["start_timestamp"])
Preis = (event["marketprice"])
timestamp = Time/1000
Zeit = datetime.fromtimestamp(timestamp)

conn = pymysql.connect(host="localhost", user="Labor2020", passwd="loveit", db="infolabor")

myCursor = conn.cursor()
myCursor.execute("INSERT INTO Strompreis_api (Uhrzeit, Strompreis) VALUES (%s, %s)", (Zeit, Preis))
myCursor.close()
conn.commit()

hab ich ein Problem:
Der Code nimmt immer den letzten Wert der Website (https://api.awattar.at/v1/marketdata), ich brauche aber den Anfangswert.

Und noch eine weitere Frage:
Ist es möglich das ganze zu automatisieren, also dass das Programm stündlich den neuen Wert in die Datenbank einträgt ?
Vielen Dank für die Hilfe.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du von meinem Post zu Deinem anderen Beitrag hier übernommen?
Mit meinem Code ist es jedenfalls mehr als trivial, Dein Problem hier zu lösen.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Feuerrabe: Dann nimm halt den ersten Wert und nicht auf so unsinnig umständliche Weise den letzten Wert. Was hast Du Dir bei der Schleife denn überhaupt gedacht‽

Namen sollten nicht kryptisch abgekürzt werden. Wenn man `response` meint sollte man nicht nur `r` schreiben und nicht `conn` wenn man `connection` meint.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Das `my` in `myCursor` bringt dem Leser überhaupt keinen Mehrwert. Das ist einfach nur `cursor`.

Man sollte prüfen ob die Antwort vom Webserver überhaupt okay war und keine Fehlermeldung.

Nicht englische und deutsche Namen mischen, insbesondere wenn die dann wie bei `Time` und `Zeit` dann auch noch das gleiche bedeuten. Man muss auch nicht jedes Zwischenergebnis an einen Namen binden.

Die Datenbankverbindung sollte man auch wieder schliessen, nicht nur den Cursor.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from contextlib import closing
from datetime import datetime as DateTime

import pymysql
import requests


def main():
    response = requests.get("https://api.awattar.at/v1/marketdata")
    response.raise_for_status()
    first_event = response.json()["data"][0]
    with closing(
        pymysql.connect(
            host="localhost", user="Labor2020", passwd="loveit", db="infolabor"
        )
    ) as connection:
        with closing(connection.cursor()) as cursor:
            cursor.execute(
                "INSERT INTO Strompreis_api (Uhrzeit, Strompreis)"
                " VALUES (%s, %s)",
                (
                    DateTime.fromtimestamp(
                        first_event["start_timestamp"] / 1000
                    ),
                    first_event["marketprice"],
                ),
            )
        connection.commit()


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten