Seltsames Verhalten bei Zugriff auf MySQL mittels mysqldb

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
PhiThi
User
Beiträge: 6
Registriert: Freitag 23. März 2012, 11:06

Liebe ForenUser,

Ich stehe vor folgendem Problem:

Ich will Daten von User welche auf einen StreamServer zugreifen in einer MySQL Datenbank loggen. Die Datenbank läuft zZ auf dem gleichem Rechner wie der Server. Ich habe zum Testen folgendes kurze Skript geschrieben:

Code: Alles auswählen

import MySQLdb

def test():
    conn = MySQLdb.connect (user = "root",
                        host = "localhost",
                        passwd = "*******",
                        db = "kompassS")

 
    ip='127.0.0.1'
    cursor = conn.cursor ()
    cursor.execute("INSERT INTO `server_log`(`status`, `ip`, `title`) VALUES ('v',%s,'NANA')",ip) 
    conn.commit()
    cursor.close ()

test()
Der Zugriff funktioniert, ich sehe den Eintrag in der Datenbank, alles ok.

Nun das Problem. Mein StreamServer sammelt Daten vom User und ruft am Ende des Streams eine Funktion (write_to_log()) in einem von mir gschriebenen Modul auf, welche genau so aussieht wie die eben beschriebene:

Code: Alles auswählen

import MySQLdb
import threading
from _threading_local import local

mydata = threading.local()
flag = threading.Event()

def write_to_log():
    
        # Verbindung zur Datenbank aufbauen
        conn = MySQLdb.connect (user = "root",
                        host = "localhost",
                        passwd = "mysql",
                        db = "kompassS")

        cursor = conn.cursor ()
        # Test: Schreiben in Tabelle
        cursor.execute("INSERT INTO `server_log`(`status`, `ip`, `title`) VALUES ('v',1234,'NANA')") 
              
        # Verbindung beenden
        cursor.close ()
        conn.commit        
        conn.close ()


        
        

Nun erscheint kein Einrtag mehr in der Datenbank. Die Funktion wird aufgerufen, dies habe ich mittels print Ausgaben überprüft. Es wird jedoch etwas in der Datenbank gemacht, weil wenn ich danach wieder mein oberesTestskript ausführe, sehe ich dass sich der PRIMARYKEY erhöht hat. Also zB:
Ausführen des Testskripts:
=> Eintrag in die Datenbank gelingt, PRIMARYKEY= 1
Ausführen von Server und Modulfunktion
=> Kein EIntrag wird gemacht!
Ausführen des Testskripts:
=> Eintrag in die Datenbank gelingt, PRIMARYKEY= 3

Ich hoffe ihr versteht das Problem und dass es vielleicht jemanden gibt der es mir erklären kann!

Vielen Dank!
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

PhiThi hat geschrieben:

Code: Alles auswählen

        conn.commit

Nun erscheint kein Einrtag mehr in der Datenbank.
conn.commit ruft nicht die Funktion auf sondern liefert die Funktion als solche. Du brauchst conn.commit().
PhiThi
User
Beiträge: 6
Registriert: Freitag 23. März 2012, 11:06

ahh... ich hoffe jetzt wirklich dass das mein Problem war... leider selten dumm die Klammern zu vergessen wo ich sie ja im Test Skript geschrieben hab... Vielen Dank schonmal, probiere morgen gleich aus!
Antworten