Ich habe ein Haupt-Python-Skript, das eine Verbindung zu einer MySQL-Datenbank herstellt und einige Datensätze daraus herauszieht. Basierend auf dem zurückgegebenen Ergebnis werden so viele Threads (Klasseninstanzen) gestartet wie viele Datensätze erfasst werden. Jeder Thread sollte zurück zur Datenbank gehen und eine andere Tabelle aktualisieren, indem ein Status-Flag auf einen anderen Status gesetzt wird ("Prozess gestartet").Wie man MySQL-Verbindung (en) mit Python Multithreading behandelt
das ich versucht zu erreichen:
1.) Führen Sie die Datenbankverbindung zu allen Threads 2.) Öffnen Sie eine neue Datenbankverbindung von jedem Thread
aber keiner von ihnen arbeiteten.
Ich konnte mein Update ohne Probleme in beiden Fällen mit try/except ausführen, aber die MySQL-Tabelle wurde nicht aktualisiert, und kein Fehler wurde generiert. Ich habe in beiden Fällen Commit gemacht.
Meine Frage wäre, wie MySQL-Verbindung (en) in einem solchen Fall zu behandeln?
aktualisiert basierend auf den ersten paar Bemerkungen:
MAIN SCRIPT
-----------
#Connecting to DB
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur = db.cursor()
# Fetching records for which I need to initiate a class instance
cur.execute('SELECT ...')
for row in cur.fetchall() :
# Initiating new instance, appending it to a list and
# starting all of them
CLASS WHICH IS INSTANTIATED
---------------------------
# Connecting to DB again. I also tried to pass connection
# which has been opened in the main script but it did not
# work either.
db = MySQLdb.connect(host = db_host,
db = db_db,
port = db_port,
user = db_user,
passwd = db_password,
charset='utf8')
# Initiating database cursor
cur_class = db.cursor()
cur.execute('UPDATE ...')
db.commit()
schwierig, etwas zu sagen, ohne zu wissen, wie Sie zu Ihrer DB verbinden und wie implementieren Sie das Updates. – Ashalynd
Ich verstehe Ihre Frage nicht vollständig. Arbeitet der einfachste Fall, wie Single-Thread-Python mit mysql verbinden und eine Tabelle aktualisieren? – qqibrow
@Ashalynd Danke, dass du dir die Zeit genommen hast! Und tut mir leid, aber ich war AFK. Ich habe meine Frage mit einem Code-Snipet aus meinen Haupt- und Klassencodes aktualisiert. Auf diese Weise initiiere ich Instanzen und öffne Datenbankverbindungen. Ich habe versucht, Fehler beim Öffnen der Verbindung und Ausführen der Abfrage von Instanz mit try/except ohne Glück zu fangen. – g0m3z