Kann mir jemand mit MySQL und Python helfen?

  • Guten Morgen,

    ich weiß nicht ob ich hier richtig bin. Ich versuche es einfach. Bitte eventuell verschieben oder löschen.


    Also ich möchte mit Python Daten aus einer Tabelle von MySql raus hohlen und dann in eine andere Datenbank schreiben.


    Ich kann auf die Datenbank zu greifen und auch etwas auslesen.

    Jetzt brauche ich etwas Hilfe um die Daten mit dem richtigen Typ raus zu hohlen.

    Details würde ich im Nächsten Beitrag schreiben. Weiß ja noch nicht ob ich hier Grundsätzlich richtig bin;-)


    Danke schon jetzt.

  • Also versuche ich mein Vorhaben so gut ich kann zu erklären.

    Ich habe einen Linuxrechner der Messwerte in eine Lokale MySQL Datenbank schreibt.

    Die Tabelle besteht aus "ID" "TIME" "SENSOR" "WERT" wobei ID ein int mit Autoinkrement ist Time ein TIMESTAMP Sensor ein varchar und Wert wider ein int.

    Dieser Rechner ist nicht immer mit dem Internet verbunden.

    Ich möchte jetzt ein Python Skript schreiben das die ID von der Lokalen Datenbank mit einer Datenbank auf einem Server vergleicht.

    Wenn die ID nicht die selbe ist möchte ich die Daten aus der Lokalen Datenbank in die Server Datenbank auf dem Server übertragen.

    Code
    mycursor.execute("select MAX(ID) from raspi16")
    myresult = mycursor.fetchall()
    print(myresult)

    Liefert mir zwar den Wert von ID aber leider nicht als integer sondern

    Code
    [(35,)]

    Also ist meine erste Hürde die Formatierung der Daten die ich aus der MySQL Datenbank hohle.

    Ich hoffe ich habe mich einigermaßen erklären können.

    Danke für die Hilfe

  • Da kommt so wie es ausschaut eine verschachtelte Liste an Werten zurück.

    Mach mal statt fetchall nur ein fetch und am Ende ein print(myresult[0])
    Ich meine damit könnte es klappen. :)

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Danke für den Tipp.

    Code
    Traceback (most recent call last):
      File "./testpy", line 57, in <module>
        myresult = mycursor.fetch()
    AttributeError: 'CMySQLCursor' object has no attribute 'fetch'

    Bekomme ich als Fehler zurück


    Mit "fetchone()" klappt es aber.

    Wieder eine kleinen Schritt weiter.

    Mal versuchen etwas weiter zu kommen. Darf ich wenn ich die nächste Hürde finde wieder fragen?

    Danke in der Zwischenzeit:)

  • Mal versuchen etwas weiter zu kommen. Darf ich wenn ich die nächste Hürde finde wieder fragen?

    Klar, gerne

    Ich war im Kopf bei PHP - aber du hast natürlich völlig recht: Bei Python3 heißt die Funktion fetchone()


    Btw - wenn du derartige Zeitserien speicherst, solltest du dir vielleicht auch mal InfuxDB anschauen. Das nutze ich bei meiner Wetterstation auch. ;)

    Die InfluxDB wirkt für mich bei Zeitserien und Tools wie Grafana in der Performance weitaus überlegen.

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Hallo bin nun am nächsten Stolperstein angelangt.

    Ich möchte die Abfrage der Tabelle Dynamisch bzw Variabel machen.

    Leider weiß ich nicht wie ich das anstellen soll.

    Mein Code sieht so aus:



    Auserdem möchte ich in der for Schleife die daten in meine Server Datenbank schreiben weiß aber nicht wie ich die unterschiedlichen werte richtig an die DB übertragen kann.

    Btw - wenn du derartige Zeitserien speicherst, solltest du dir vielleicht auch mal InfuxDB anschauen. Das nutze ich bei meiner Wetterstation auch.

    Die InfluxDB wirkt für mich bei Zeitserien und Tools wie Grafana in der Performance weitaus überlegen.

    Danke für den Tipp ich möchte aber zuesrst mal ein wenig in die MySql Geschichte rein kommen.

    In einem 2 Moment ist InfuxDb sicher interessant. Bin aber mit den ganzen noch zu Jungfräulich


    Danke für die Hilfe

  • Hallo:-)

    Konnte mein erste Problem mit den Platzhalter lösen.

    Jetzt müsste ich es noch schaffen mit der For Schleife in die Datenbank auf den Server die Daten zu schreiben.


    Danke für die Hilfe

  • Wie gesagt - hier brauchst du jetzt Prepared Statements --> https://stackoverflow.com/ques…ents-with-mysql-in-python


    Hast du bei den prints einfach die Klammern weggelassen oder arbeitest du ernsthaft mit Python2? Dir ist bewusst, dass Python2 End of Life ist und nicht mehr supportet wird? (https://www.python.org/doc/sunset-python-2/)

    Da jetzt Software drin zu schreiben ist quasi unsicher und fast für die Tonne... es lässt sich ja zum Glück einfach auf Python3 "umschreiben".

    "Denn der radikalste Zweifel ist der Vater der Erkenntnis."

    -Max Weber

  • Guten Morgen,

    habe gestern das Skript im Groben hin bekommen.

    Das Skript funktioniert. Wäre aber für Anregungen dankbar. Ist ja meine erste Erfahrung mit Python.

    Hast du bei den prints einfach die Klammern weggelassen oder arbeitest du ernsthaft mit Python2?

    Das habe ich unbewusst getan. Wollte eigentlich Python3 schreiben.

    Danke für die Hilfe

    Kann man sich eine Wahrnung ausgeben lassen wenn man Python2 aus versehen macht?

  • Ich glaube er meint eher, dass die IDE solche Dinge wie print <> print() erkennt und auf korrekte Python3 Syntax achtet.

    Manche IDEs können das. Pycharm z.B. scheint das zu können... bin mir aber nicht sicher bei der kostenlosen Version.