sqlalchemy kann sich nach Serverupdate nicht mehr verbinden

Django, Flask, Bottle, WSGI, CGI…
Antworten
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Hallo,
ich betreibe flask auf einem Ubuntu-Server. Diesen habe ich letzte Woche von 20.04 auf 22.04 aktualisiert. Ich habe das venv mit Python10 neu eingerichtet und Flask läuft einwandfrei, auch mit der Datenbankanbindung zu einem mysql-Server (der seinerseits auf einem Windows-Rechner läuft).
aber:
in meinem Flask-Projekt benutze ich eine einzige Abfrage, die zwar auf den gleichen mysql-Server geht, aber auf eine andere Datenbank. Der Code sieht so aus:

Code: Alles auswählen

engine=sqlalchemy.create_engine('mysql+pymysql://xxxx:xxxx@192.186.1.2:3306/daten?charset=utf8')
con = engine.connect() #externe DB
Das ist früher immer so gelaufen, aber das funktioniert nun nicht mehr. Auch wenn ich den Flask-Server ganz abschalte und aus dem venv heraus Python starte und die obigen Zeilen in die Python-Konsole eingebe (natürlich vorher ein import sqlalchemy), dann geht es nicht. Nach engine.connect() passiert einfach nichts mehr. Gar nichts. Keine Fehlermeldung, nicht mal ein Timeout, das Programm hängt fest. Ich kann dann nur noch mit Ctrl-C einen KeyboardInterrupt machen, mehr geht nicht.

Die Datenbank gibt es und ich kann sie auch über den mysql-client erreichen, an der hat sich nichts geändert.

Hat jemand irgend eine Idee, was das sein könnte?


LG
Benutzeravatar
grubenfox
User
Beiträge: 413
Registriert: Freitag 2. Dezember 2022, 15:49

keinen blassen Schimmer, aber eine schwache Vermutung....

Von der SQLAlchemy-Seite die News:
SQLAlchemy 1.4.47 Released
Sat, 18 Mar 2023
SQLAlchemy 2.0.7 Released
Sat, 18 Mar 2023
SQLAlchemy 2.0.6 Released
Mon, 13 Mar 2023
SQLAlchemy 2.0.5 Released
Mon, 06 Mar 2023
SQLAlchemy 2.0.4 Released
Fri, 17 Feb 2023
Auf welche Version von SQLAlchemy hattest du letzte Woche geupdatetet? Zwischen Version 2.0.4 und 2.0.5 lagen noch 17 Tage, die nächsten beiden Version kamen schon nach 7 bzw. 5 Tagen. Sieht mir nach leicht hektischen Bugfix-Updates aus... was auch immer das Problem bei dir ist, vielleicht hat sich das in der neuesten Version schon erledigt.
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

Python: 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
Flask: 2.2.3
SQLAlchemy: 2.0.5.post1
Platform: Linux-5.15.0-67-generic-x86_64-with-glibc2.35


Die genaue Stelle, wo er hängt zeigt sich nach dem KeyboardInterrupt:

File "/home/bea3/bea3_flask/lib/python3.10/site-packages/pymysql/connections.py", line 732, in _read_bytes
data = self._rfile.read(num_bytes)
File "/usr/lib/python3.10/socket.py", line 705, in readinto
return self._sock.recv_into(b)
KeyboardInterrupt

Dazu gibt es was bei stackoverflow, was die Symptome ziemlich gut beschreibt:

https://stackoverflow.com/questions/603 ... recv-intob

Aber da bin ich mit meinem Latein am Ende. Merkwürdig halt, das die Schiene Flask-sqlalchemy funktioniert.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@grubenfox: Die Adjektive und Vermutungen lassen sich mit einem Blick in das changelog auflösen.

@Hase: Funktioniert denn grundsätzlich der Connect von dem Rechner auf die Zieldatenbank?
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

ja, funktioniert.

Die Flask-App kann auf die Haupt-DB zugreifen. Der mysql-Client kann auch zugreifen.

Ich brauche aber für eine einzige Abfrage den Zugriff auf eine andere DB auf dem gleichen mysql-Server, wo auch die Haupt-DB läuft. Das ist das oben beschriebene Problem und das funktioniert nicht mehr.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Nur um nochmal sicher zu gehen: Es funktioniert von dem Rechner, auf dem die Flask App läuft, der Zugriff mit dem MySQL Client mit den Credentials, die auch die Flask App nutzt, der Zugriff auf die Zieldatenbank?

Das geht aus deinem Beitrag nicht hervor.
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

also,
irgendwo in Mecklenburg steht ein Windows Server (192.168.1.2) mit einem Mysql-Server drauf. Direkt daneben steht ein Linux-Server (192.168.1.253), auf den ich SSH-Zugriff habe. Diesen habe ich von Ubuntu 20.04 auf 22.04 aktualisiert, darauf läuft die Flask-App.

Die Flask-App kann via SqlAlchemy auf den mysql-Server zugreifen.
Credentials sind:
SECRET_KEY = 'geheim'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://xxxx:xxxx@192.168.1.2:3306/HAUPTDATENBANK?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = False


Die Flask-App kann, wenn sie läuft, NICHT folgenden Code ausführen:

Code: Alles auswählen

engine=sqlalchemy.create_engine('mysql+pymysql://xxxx:xxxx@192.186.1.2:3306/ANDEREDATENBANK?charset=utf8')
con = engine.connect()
Beim engine.connect() stoppt der Programmlauf ohne Fehlermeldung.


Ich kann dort, wenn ich per SSH auf der Linux-Maschine eingeloggt bin, von Terminal aus mittles

ubuntuserver:~$ mysql -h 192.168.1.2 -u xxxx -pxxxx

auf die Datenbank zugreifen, und zwar sowohl auf die HAUPTDATENBANK als auch auf die ANDEREDATENBANK


Die Flask-App läuft in einer Venv. Wenn ich die Flask-app ausschalte und das Venv aktiviere, kann ich folgenden Datei "test.py" nicht ausführen.

Code: Alles auswählen

import sqlalchemy
engine=sqlalchemy.create_engine('mysql+pymysql://xxxx:xxxx@192.186.1.2:3306/ANDEREDATENBANK?charset=utf8')
con = engine.connect()
Beim engine.connect() stoppt der Programmlauf ohne Fehlermeldung.

Ich hoffe, jetzt ist es genau genug, mehr weiß ich nicht.
Hase
User
Beiträge: 100
Registriert: Donnerstag 1. Oktober 2009, 15:17
Wohnort: Bremer Speckgürtel

JA VERDAMMTER MIST NOCHMAL!

Das ist jetzt mein 100 Beitrag und ich war noch nie so beschämt: DA IST JA EIN FUC**NG Zahlendreher in der IP-Adresse.
ich war noch nie so beschämt.
ich möchte mich bei allen Leuten entschuldigen, denen ich die Zeit gestohlen habe.
Man, ist das peinlich.

Ich gehe jetzt zu Bett. Gute Nacht.
Benutzeravatar
grubenfox
User
Beiträge: 413
Registriert: Freitag 2. Dezember 2022, 15:49

Ach, peinlich wird es erst wenn dir der Fehler zukünftig noch ein zweites Mal passiert... ;)
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Definitiv wirst du zukünftig bei der Eingabe von IP-Adressen diese mehrfach auf Korrektheit kontrollieren. Kenn ich. ;-)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
grubenfox
User
Beiträge: 413
Registriert: Freitag 2. Dezember 2022, 15:49

Es lebe die Konstante MEINE_FUC__NG_IP_ADRESSE
(Schade dass man die ** nicht in den Namen einbauen kann....)
:D
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Man kann das auch einfach ausschreiben. Kein Grund für * oder _. Die FCC hat selbst in den USA nix zu Quelltexten zu sagen. 🙂
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder man programmiert in Hy, da kann man auch * im Namen haben.

Code: Alles auswählen

(setv MEINE-FUC**NG-IP-ADRESSE "192.168.1.2")

; ...

  (setv engine (create-engine (+ "mysql+pymysql://xxxx:xxxx@"
                                 MEINE-FUC**NG-IP-ADRESSE
                                 ":3306/HAUPTDATENBANK?charset=utf8"))
        connection (.connect engine))
  ; ...
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten