Seite 1 von 1

Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 15:23
von Papp Nase
]Ich habe zwei Pythonprogramme, ein Hauptprogramm und ein Programm, das Funktionsdefinitionen enthält.

Code: Alles auswählen

# Hauptprogram
import MySQLdb
import Datenbankdef

# Datenbank init
db = MySQLdb.Connect ( ...)

Test = Datenbankdef.DB_Info (db, 4)
print Test

Code: Alles auswählen

# Datei Datenbankdef.py

def DB_Info(DBHandler, Wert):
    Cursor = DBHandler.Cursor()
    Cursor.execute ("SELECT VERSION ()")
    print Cursor.fetchone()
    return (2 * Wert)
Fehlermeldung: DBHandler.Cursor -> diese Funktion ist nicht bekannt. Im Hauptprogramm ist die Funktion bekannt.

Wie kann ich an ein Unterprogramm nicht nur den Zeiger von db übergeben, sonder auch die dazugehörigen Funktionen, die im Hauptprogramm verfügbar sind, damit ich sie im Unterprogramm auch benutzen kann?

Re: Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 15:46
von BlackJack
@Papp Nase: Echter Quelltext mit den dazugehörigen echten und vollständigen Fehlermeldungen/Stacktraces wäre nicht schlecht.

Denn bei dem was Du zeigst kann das eigentlich nicht passieren, ausser es ist tatsächlich ein Fehler in der Schreibweise, denn es müsste `connect()` und `cursor()` heissen, also mit kleinen Buchstaben.

In dem Zusammenhang wäre vielleicht ein Blick in den Style Guide for Python Code auch nicht schlecht.

Re: Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 17:18
von Papp Nase
Vielen Dank für die Antwort. Es lag tatsächlich an dem kleinen "c", wo ich "Cursor" statt "cursor" schrieb. Jetzt funktioniert es.

Meine beiden kleinen Testprogramme hatten nicht mehr Quelltext als in den beiden Blöcken stand.

Re: Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 17:45
von BlackJack
Das `Connect()` muss auch klein geschrieben werden. Es gibt die Funktion zwar auch in dieser Schreibweise im `MySQLdb`-Modul, aber das entspricht nicht der offiziellen API: DB API 2.0.

Re: Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 18:45
von Papp Nase
Kannst Du mir mal ein kleines Geheimnis verraten?

Hier mal ein Auszug von dieser Quelle: http://openbook.galileocomputing.de/pyt ... 05093491f1

Code: Alles auswählen

cursor.execute(""" 
   CREATE TABLE autos (marke TEXT, ps INTEGER, baujahr INTEGER) 
    """) 

cursor.execute("INSERT INTO autos VALUES('Volvo', 130, 1995)")

Bei dem ersten cursor.execute (""" stehen drei Gänsefüßchen """, bei dem zweiten nur eins (bei dem Befehl INSERT INTO...).

Ich verstehe das nicht, warum mal drei Gänsefüßchen und mal eins.

Re: Übergabe Schlüssel an Subroutine schlägt fehl

Verfasst: Dienstag 11. März 2014, 18:53
von BlackJack
Das steht auch im Buch, und zwar bei Zeichenketten (wer hätte das gedacht): http://openbook.galileocomputing.de/pyt ... 15f08f30ad