pymssql / _mssql Datenbankverbindung nicht möglich

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
itkokot
User
Beiträge: 2
Registriert: Mittwoch 12. März 2014, 16:02

Hallo an alle,
das ist mein erster Beitrag, also etwas Gnade bitte ;)

Zum Problem:

Ich erstelle ein Installationsprogramm, welches zu einer MSSQL DB Connectet, dies funktioniert auch problemlos,
sofern die Daten direkt eingegeben wurden, und vom Input kommend zum verbinden genutzt werden.

Allerdings hört der Spass auf, wenn ich die Daten aus einer TXT Datei einlese und dann zum verbinden verwende.

Hat hier jemand eine idee, oder kann mir einen Tipp geben?
Bin gerade um jede Hilfe dankbar.

Code: Alles auswählen

# Module zum lesen und schreiben von Dateien
import sys
import _mssql

print ("KAS-install | Copyright: IT-Dienstleistungen Kokot")
print ("--------------------------------------------------")
print ("Dieses Programm wird die Datenbanken installieren,")
print ("und grundlegende Dateien erstellen!")
print ("--------------------------------------------------")
print ()
print ("Überprüfung ob Configdatei existiert:")
try:
    # Textdatei einlesen, sofern vorhanden
    d = open("config.txt")
except:
    print ("Configdatei noch nicht existent, fahre fort.....")
    print ("Bitte geben Sie den Servernamen oder die IP ein:")
    servername = input()
    print ("Bitte geben Sie Benutzernamen für den Server ein:")
    benutzername = input()
    print ("Bitte geben Sie das Passwort für den Server ein:")
    passwort = input()
    print ("Bitte geben Sie den Namen der Datenbank ein:")
    datenbank = input()
    # Testen der Verbindung zum Server

    try:
        conn = _mssql.connect(server=servername, user=benutzername, password=passwort, database=datenbank)
        print("Verbindung erfolgreich getestet")
        conn.close()
    except _mssql.MssqlDatabaseException:
        print("SQL Verbindung gescheitert!")
        conn.close()
        input ("Bitte drücken Sie [ENTER] zum beenden.......")
        sys.exit(0)
    # Textdatei einlesen
    d = open("config.txt","w")

    # Schreiben der Konfiguration in einzelne Zeilen
    d.write(servername)
    d.write("\n")
    d.write(benutzername)
    d.write("\n")
    d.write(passwort)
    d.write("\n")
    d.write(datenbank)

    d.close
    print ()
    print ("Die Konfigurationsdatei wurde erfolgreich erstellt.")
    print ("Sie können nun KAS starten")
    input ("Bitte drücken Sie [ENTER] zum beenden.......")
    sys.exit(0)

# Textdatei einlesen war erfdolgreich
print ("OK: config.txt exists")
print ("")
print ("Daten in der config.txt:")

# Textdatei auslesen und wiedergeben
servername = d.readline()
print ("Servername:",servername, end="")
benutzername = d.readline()
print ("Benutzername:",benutzername, end="")
passwort = d.readline()
print ("Passwort:",passwort, end="")
datenbank = d.readline()
print ("Datenbank:",datenbank, end="")
print ()
d.close()
print ("Stimmen diese Verbindungsdaten? [y] oder [n]")
dataright = input()
#Eingabe war JA
if (dataright == "y" or dataright == "Y"):
    print ("Testen der Verbindung.....")
    # Testen der Verbindung zum Server
    try:
        d = open("config.txt")
        servername = d.readline()
        benutzername = d.readline()
        passwort = d.readline()
        datenbank = d.readline()
        print ()
        d.close()
        #Testausgabe der Daten
        print ("Test:", servername, benutzername, passwort, datenbank)
        #Datenbankverbindung
        conn = _mssql.connect(server=servername, user=benutzername, password=passwort, database=datenbank)
        print("Verbindung erfolgreich getestet!")
        conn.close()
        d.close()
        print ()
        print ("Sie können nun KAS starten")
        input ("Bitte drücken Sie [ENTER] zum beenden.......")
        sys.exit(0)
    except:
        input ("Bitte drücken Sie [ENTER] zum beenden.......")
        sys.exit(0)

    # Auskommentiert, da sonst nur Fehlermeldung
    
    #except _mssql.MssqlDatabaseException:
        #print("SQL Verbindung gescheitert!")
        #conn.close()
        #print("Das Programm wird beendet, bitte prüfen Sie nochmals die Serverdaten.")
        #input ("Bitte drücken Sie [ENTER] zum beenden.......")
        #sys.exit(0)

# Abfrage N Daten neu eingeben
elif (dataright == "n"):
    print ("Bitte geben Sie Daten für die Config neu ein:")
    print ()
    print ("Bitte geben Sie den Servernamen oder die IP ein:")
    servername = input()
    print ("Bitte geben Sie Benutzernamen für den Server ein:")
    benutzername = input()
    print ("Bitte geben Sie das Passwort für den Server ein:")
    passwort = input()
    print ("Bitte geben Sie den Namen der Datenbank ein:")
    datenbank = input()

    try:
        conn = _mssql.connect(server=servername, user=benutzername, password=passwort, database=datenbank)
        print("Verbindung erfolgreich getestet!")
        conn.close()

        try:
            d = open("config.txt","w")
        except:
            print("Dateizugriff ist gescheitert!")
            input ("Bitte drücken Sie [ENTER] zum beenden.......")
            sys.exit(0)

        # Schreiben der Konfiguration in einzelne Zeilen
        d.write(servername)
        d.write("\n")
        d.write(benutzername)
        d.write("\n")
        d.write(passwort)
        d.write("\n")
        d.write(datenbank)

        d.close
        print ()
        print ("Die Konfigurationsdatei wurde erfolgreich erstellt.")
        print ("Sie können nun KAS starten")
        input ("Bitte drücken Sie [ENTER] zum beenden.......")
        sys.exit(0)
    except _mssql.MssqlDatabaseException:
        print("SQL Verbindung gescheitert!")
        conn.close()
        print("Das Programm wird beendet, bitte prüfen Sie nochmals die Serverdaten.")
        input ("Bitte drücken Sie [ENTER] zum beenden.......")
        sys.exit(0)
BlackJack

@itkokot: Die gelesenen Zeilen enthalten im Gegensatz zum `input()`-Ergebnis das Zeilenende.

Der Quelltext sieht übrigens ziemlich gruselig aus. Viele Code-Wiederholungen, nichtssagende, einbuchstabige Namen, nicht geschlossene Dateien, verwenden von nicht-öffentlicher APIs, alles auf Modulebene und nicht ordentlich in Funktionen aufgeteilt, Kommentare wie ``# Textdatei einlesen`` bevor eine Textdatei *geschrieben* wird, zusätzliche `print()`-Aufrufe für `input()`-Aufrufe ohne Argumente, komische Leerzeichensetzung bei den `print()`-Aufrufen, nackte ``except``\s ohne konkrete Ausnahme(n), bedingte Zweige die nicht alle Fälle abdecken, unnötige Klammern um Bedingungen, und ein eigenes ”Datenformat” für so eine Konfigurationsdatei sollte man auch nicht ohne Not erfinden. Es gibt `configparser` oder `json` in der Standardbibliothek.

Oh verdammt, jetzt hatte ich das mit der Gnade überlesen. ;-)
itkokot
User
Beiträge: 2
Registriert: Mittwoch 12. März 2014, 16:02

Oha, mein kopf ist nun sauber und rein, gewaschen sollte er nun sein ;)

ja ich weiss, das ganze ist inzwischen total konfus geworden durch viel probiererei, aber ich gelobe besserung.

Danke, das war sicher der entscheidende Hinweis und den werde ich ausprobieren, und hier berichten, hilft sicher auch anderen weiter ;)
Antworten