MySQL Server + Python

  • Hallo!

    Ich habe folgendes Problem:

    Ich habe die Datenbank regulär erstellt (Verbindung von einem beliebigen Host zulassen).
    Nun habe ich ein Skript auf meinem PC und möchte gerne mich mit diesem Verbinden. Das Skript läuft auf Python 3.11.2 und ich verwende den peewee (mysql-modul).


    Die Verbindung allerdings wird nicht aufgebaut. Woran kann das liegen?


    Liebe Grüße! :)

  • Mehr Details und die genaue Fehlermeldung wären nicht schlecht ;)


    Schuss ins Blaue: Du versuchst Dich mit der privaten IP-Adresse des MySQL-Servers zu verbinden und nicht mit der öffentlichen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Gefällt mir 2
  • Hi, exakt das ist, dass was ich versuche! :D
    Im Endeffekt wird bei mir auf dem PC die Verbindung schon nicht zugelassen.


    Das ist die Fehlermeldung, die ich erhalte auf in meinem Skript:

    MySQLdb.OperationalError: (2003, "Can't connect to MySQL server on 'ip:port' (60)")


    Was laut Dokumentation, auf einen Fehler des Servers hinweist.

    Ich habe auch eine lokale Version des MySQL Servers installiert, damit klappt es einwandfrei. Mein Code ist also Fehlerfrei :D

  • Habe tatsächlich gerade herausgefunden, dass sich die öffentliche IP-Adresse in dem DNS der Domain versteckt. Das probelm ist gelöst. Allerdings ist jetzt das weitere Problem:

    Ich versuche einen Table zu erstellen, mein Skript wird korrekt ausgeführt, allerdings wird der Table nicht richtig erstellt. Von meinen insgesamt 11 Spalten wird nur "ID" erstellt.

  • Das funktioniert einwandfrei auf dem lokalen Server.

    Auf dem hier, wird allerdings nur ein Table namens user angelegt mit id, sonst nichts.
    Beim einfügen wird auch auch nur eine id erstellt. Der rest fehlt natürlich komplett.

    Fehler werden auch keine ausgespuckt.

    Ja "Fehlerfreier Code" mag für manch einen schon kompliziert zu sein, aber nach 10 Jahren Python, denke ich das ich die Fehler doch sehr einfach fixen kann. Nur der Code läuft durch ohne Probleme, was für mich unverständlich ist.

  • Hmmm, ja, da scheint dann evtl. peewee Murks zu machen. Kannst du da mit dem Debugger durchsteppen um zu sehen welchen SQL Befehl peewee am Ende als Create Table absetzt? Wobei -imho- Mysql einen Create Table entweder ganz oder garnicht durchführt, aber evtl. macht peewee den Create Table mit einzelnen Alter-Statements für jede Spalte und diese schlagen fehl weil ein zu moderner Syntax verwendet wird und peewee reagiert auf entsprechende SQL Fehler nicht?


    Wie gesagt entweder mal mit dem Debugger durchsuchen oder mit Wireshark die Befehle abfangen (wenn die Mysql Verbindung unverschlüsselt ist) und dann gucken was hier schief läuft. Ein SQL Tracing auf Serverseite würde auch helfen aber wenn das Webhosting ist geht das evtl. nicht.

  • Lösung gefunden:

    Es war ein Fehler den ich tatsächlich (wegen zuhäufiger Verwendung von Pydantic), in dem Model:

    statt:

    id: AutoField(primary_key=True)


    ändern auf:

    id = AutoField(primary_key=True)


    Immer wieder schön, wie einem ein simples Zeichen, was augenscheinlich nicht Falsch ist, als fehler sich herausstellt!

    Vielen Dank an alle! :)