2016-06-15 10 views
0

Hallo Ich bekomme einen Fehler, wenn ich versuche, eine Verbindung zu einer MySQL-Datenbank herzustellen.Python mysql Fehler mit Cursor

import threading 
from mysql.connector import MySQLConnection, Error 
from python_mysql_dbconfig import read_db_config 

class Queue (threading.Thread): 
    def __init__(self, threadID, lock): 
     threading.Thread.__init__(self) 
     self.threadID = threadID 
     self.lock = lock 
    def run(self): 
     while True: 
      try: 
       dbconfig = read_db_config() 
       conn = MySQLConnection(**dbconfig) 
       cursor = conn.cursor() 
      except Error as e: 
       print(e) 
      finally: 
       cursor.close() 
       conn.close() 

Dies ist ein gestreifter Teil des Codes, aber ich bekomme immer noch die gleichen Fehler auf der Linie nach finally: heißt es, dass cursor nicht definiert ist. Der Code läuft in einem Deamon auf Ubuntu.

EDIT: Einige weitere Informationen über den Code read_db_config()

from configparser import ConfigParser 


def read_db_config(filename='config.ini', section='mysql'): 
    """ Read database configuration file and return a dictionary object 
    :param filename: name of the configuration file 
    :param section: section of database configuration 
    :return: a dictionary of database parameters 
    """ 
    # create parser and read ini configuration file 
    parser = ConfigParser() 
    parser.read(filename) 

    # get section, default to mysql 
    db = {} 
    if parser.has_section(section): 
     items = parser.items(section) 
     for item in items: 
      db[item[0]] = item[1] 
    else: 
     raise Exception('{0} not found in the {1} file'.format(section, filename)) 

    return db 

Und der Config-Datei mit falschen Werten

[mysql] 
host = IP 
database = database 
user = user 
password = password 

EDIT2: den Code ohne die try-Anweisung Lauf gab diesen Fehler

mysql not found in the config.ini file 

Kann es sein, dass meine Funktion read_db_config() die Konfigurationsdatei nicht finden kann, aber sie sich im selben Ordner befindet.

+1

Wenn Sie eine Ausnahme vor dem 'Cursor = conn.cursor sind immer()' Linie, dann ist die cursor.close() wird wahrscheinlich scheitern ... – Bret

+0

Okej so muss wahrscheinlich die 'conn = MySQLConnection (** dbconfig) 'ist falsch. –

+0

Ich habe nach dem Löschen der try-Anweisung einen neuen Fehler erhalten. 'mysql nicht in der Datei 'config.ini' gefunden –

Antwort

2

So ... nach ein wenig Fehlersuche ...

Die Lösung set the current working directory war, wenn das Skript von außerhalb des Ordners aufrufen, in dem die Konfigurationsdatei befand.

+0

Ja, es ist oft die einfachsten Dinge, die am schwierigsten zu finden sind. –

1

Ich habe Ihren Code von read_db_config ausgeführt und alles ist in Ordnung. Ich denke, dass das Problem der Pfad der Konfigurationsdatei ist. Wenn Sie nur aus dem Wurzelpfad Ihrer Anwendung, ich meine:

- root_dir 
    - parser.py 
    - config.ini 

Ihre Funktion wird gut funktionieren, aber wenn man als importierte lib ausführen, müssen Sie die Funktion den gesamten Pfad zu übergeben.

>>import os 
>>parser = ConfigParser() 
>>parser.read(os.path.abspath('<abs_path_of_config_file>')