Passwortabfrage in Python mit MariaDB

mschrak

Commander
Registriert
Sep. 2009
Beiträge
2.199
Hallo zusammen,

ich versuche gerade, in Python eine MariaDB mit SELECT abzufragen, um den (einen eindeutigen) Wert mit einer Benutzereingabe abzugleichen. Im Einzelnen: Ich habe eine DB "datenbank" mit der Tabelle datenbank_nutzer. Diese hat die Spalten nutzer_kuerzel (varchar(3)+index UNIQUE) und nutzer_passwort (int(6)).
Die Inhalte sehen etwa so aus:
jke 354
opl 985
plq 521

Irgendwie bekomme ich es nicht hin, den einen gewünschten Ausgabewert für meine Abfrage in eine Variable zu speichern.
In Excel würde ich sagen "=WENN(A2=SVERWEIS(A1;passworttabelle;FALSCH);tu was der nutzer will;tu es nicht)
Kann mir jemand auf die Sprünge helfen, wie ich das umsetze?

Martin
 
Du möchtest in einem Python-Script eine Benutzereingabe mit dem Query-Result aus einer Datenbank abgleichen und dementsprechend, ob die Werte übereinstimmen etwas ausgeben? Hab ich das richtig verstanden?
 
Wo hängt es denn konkret? Bei Programmierfragen empfiehlt es sich, den relevanten Code zu posten.
 
Wie sieht dein Code aus? Wie sieht dein SQL Statement aus? Bis wann muss die Hausaufgabe fertig sein fiesGrins ;)
 
mschrak schrieb:
Kann mir jemand auf die Sprünge helfen, wie ich das umsetze?
So mit Passwörtern in Klartext gespeichert jedenfalls schon mal gar nicht. Nimm dir ein Python authentication module dafür.
 
  • Gefällt mir
Reaktionen: Raijin und Nase
Irgendwie ist es recht auffällig, dass hier ein und derselbe User 2 Forenbereiche mit typischen Anfängerfragen flutet. Generell find ich es wichtig immer viel zu fragen, aber es sieht so aus, als wären Grundlagen nicht wirklich vorhanden. Die Aussage "In Excel würde ich.." bestätigt das irgendwie.
 
  • Gefällt mir
Reaktionen: andy_m4
@Tokolosh: 1. Ja, genau das möchte ich. 2. Fluten würde ich das nicht nennen. Aber ja, ich finde das Thema Programmierung recht schwierig in der Herangehensweise und ich kann deutlich besser lernen, wenn ich anhand eines Projekts sehe, wofür die Schritte nötig sind. Ich hatte erst mit einem Python-Buch angefangen, aber dann habe ich mich immer mehr in abstrakten Aussagen verfranst, die ich nicht mehr verstanden habe, ohne zu wissen, wofür sie da sind (Stichwort Objektorientierung, Klassen, Module, ...). Irgendwann ist das ein theoretischer Brei, der einem nichts weiter sagt, ausser eben, man macht einfach mal. So wie ich jetzt hier. Und dabei (nein es ist keine Hausaufgabe) habe ich ein Projekt, was ich ganz gut gebrauchen könnte. 3. Mal anders gefragt: Was würdest Du denn als "Grundlagen" bezeichnen? Wissen wie ein Server funktioniert? Wissen wie Datenbanken funktionieren? Grundlagen der Programmierung? Leider sind all diese Bereiche inzwischen so umfangreich, dass man sich damit monatelang beschäftigen kann, ohne Land zu sehen. Und dann habe ich das erste schon wieder vergessen. Ich bevorzuge Learning by doing. Und die Einzelprobleme, über die ich stolpere kommen aus so unterschielichen Bereichen, dass ich manche Fragestellungen eben einfach nur beantworten möchte, um an anderer Stelle weiterzukommen.
Und das mit Excel habe ich nur geschrieben, um meine Absicht zu verdeutlichen.
@BeBur: Danke für den Hinweis. Gibt es irgendwo eine gute Übersicht über Python3 Module und deren Bestandteile? Was offizielles und evtl. auf deutsch?
Ergänzung ()

P.S.: Falls Euch das meiner Fragerei gegenüber etwas milder stimmt: Ich habe 2 kleine Kinder, meine Konzentrationsphase dauert im Schnitt ca. 5 bis 7 Minuten und ich bin permanent übernächtigt. Falls jemand einen Tipp hat, wo ich mir die genannten "Grundlagen" einigermaßen konzentriert anlesen kann, bin ich zutiefst dankbar. Aber das Internet ist, um es vorsichtig auszudrücken, "unübersichtlich".
 
Zuletzt bearbeitet:
mschrak schrieb:
Aber ja, ich finde das Thema Programmierung recht schwierig in der Herangehensweise und ich kann deutlich besser lernen, wenn ich anhand eines Projekts sehe, wofür die Schritte nötig sind.
Programmierung anhand eines Projektes zu lernen ist sicher nicht verkehrt.
Die Frage ist ja, ob man sich dann an ein vergleichsweise großes Projekt ran macht, wo man dann auch gleich mehrere Felder mit einmal beackern muss.

Als ich angefangen hab, waren es vor allem kleinere Probleme die ich bearbeitet habe.
Und auch heute ist es so, das ich nicht selten auch mal überschaubare Probleme lösen möchte. Da findet sich also immer irgendwie was.

mschrak schrieb:
Ich habe 2 kleine Kinder, meine Konzentrationsphase dauert im Schnitt ca. 5 bis 7 Minuten und ich bin permanent übernächtigt.
Was ja auch eher dafür spricht da erst mal etwas kleinere Brötchen zu backen bis sich die Situation bessert. Weil wenn die zeitliche Situation wirklich so dramatisch ist, hilft Dir auch die Fragerei im Forum nicht wirklich weiter.
 
... und genau deshalb hatte ich diese Frage hier im Forum gestellt.
https://www.computerbase.de/forum/threads/lernumfang-und-projektumfang.1890538/

Und mein Eindruck war, dass es mehrheitlich als überschaubares Projekt eingestuft wurde. Hinzu kommt, dass mich Datenbanken ganz grundsätzlich interessieren. Python habe ich gewählt, weil es den Ruf "anfängerfreundlich" geniesst, was ich erst mal bestätigen kann. Im Übrigen hatte es mich geärgert, dass Datenbanken dem "nicht programmierenden Benutzer" offenbar in der praktischen Benutzung vorenthalten werden sollen. Früher konnte man noch mit Access ein ganzes Warenwirtschaftssystem mit Rechteverwaltung stricken. Heute (mit den neueren Access-Versionen) geht das einfach nicht mehr. Es ist tatsächlich offenbar beschnitten worden, um MS SQL Server zu verkaufen.
 
mschrak schrieb:
Leider sind all diese Bereiche inzwischen so umfangreich, dass man sich damit monatelang beschäftigen kann, ohne Land zu sehen.
Ja, das ist so.

mschrak schrieb:
Und mein Eindruck war, dass es mehrheitlich als überschaubares Projekt eingestuft wurde.
Ist es auch. Das heißt aber nicht das es sich als Programmieranfänger kurzfristig oder ohne Probleme umsetzen lässt. Das du mehr google verwendest als du programmierst und du auf mehr Probleme stößt als du Codezeilen schreibst ist halbwegs normal.

Man kann die ersten Schritte programmieren auch mithilfe eines Buches oder Videos machen. Vielleicht taugt dir das besser. Und dann später zu deinem Projekt zurückkommen. Jeder lernt anders (bzw. jedem macht es anders spaß).
 
mschrak schrieb:
Und mein Eindruck war, dass es mehrheitlich als überschaubares Projekt eingestuft wurde.
Kommt wohl stark darauf an, wie man überschaubares Projekt definiert. Also wenn da schon mit MySQL, Apache, Linux und PHP drei gänzlich unbekannte Sachen mit dabei sind, dann ist das kein kleines, überschaubares Anfängerprojekt mehr.

Ich bin gerade dabei ein kleines Tool für eigene Zwecke zu schreiben. Das hat so ca. 300 Programmzeilen und ist auch nicht großartig auf irgendwelche externen Tools angewiesen.
So was würde ich als kleines Projekt ansehen.
Und selbst dar würde ich aus der Erfahrung heraus sagen, das es für ein Anfänger ein nur sehr schwer zu bewältigende Aufgabenstellung ist.

Wenn Du Dein Projekt schon unbedingt angehen willst, würde ich auf Datenbank und Weboberfläche zunächst verzichten und das mit einer klassischen GUI (und selbst auf die könnte man im ersten Schritt weglassen und einfach nur ein Kommandozeilentool schreiben) machen und die Daten auch nur als Textdatei speichern.
Damit Du überhaupt erst mal in Python rein kommst und lernst, wie man grundlegende Dinge mit einer Programmiersprache löst.

Dann kann man von mir aus weiter sehen.

mschrak schrieb:
Im Übrigen hatte es mich geärgert, dass Datenbanken dem "nicht programmierenden Benutzer" offenbar in der praktischen Benutzung vorenthalten werden sollen. Früher konnte man noch mit Access ein ganzes Warenwirtschaftssystem mit Rechteverwaltung stricken.
Ich hab jetzt mit Access noch nicht sooo viel gemacht, kann mich aber erinnern das es für einfache Sachen gar nicht so schlecht war.
Ich weiß nicht wie das heutige Access ist, würde aber mal denken das sowas wie LibreOffice-Base dem damaligen Access am nächsten kommen dürfte.
 
Programmierung, bzw. gerade das erlernen von neuen Ansätzen erfordert nun einmal Konzentration. Drauf los programmieren endet jedoch in dutzenden Fragen wenn man nicht vorher verstanden hat, was Variablen sind, die Grundzüge der Objekt orientierten Programmierung zumindest grundlegend verinnerlicht hat und was Klassen sind.
Eine Liste aller möglichen Python Module gibt es z.B. hier: https://docs.python.org/3/py-modindex.html
Jedoch wirst du es schwer haben "offizielle" Informationen auf deutsch zu finden. Programmierung ist nunmal internationalisiert und damit auf englisch, ebenso die "offiziellen" Dokus, alles andere sind eben Tutorials und Anleitungen von Dritten.
Ich würde mir ein paar online learning Plattformen ansehen wo man spielerisch in kleinen Abschnitten Python lernen kann. Dies sind meist kurze Abschnitte und Einheiten um die Grundzüge zu lernen.

Du musst nicht im Detail wissen, wie ein Server funktioniert aber wenn du mit Datenbanken arbeiten willst sind Grundlagen in SQL schon nicht verkehrt, sprich was ist ein Primary Key, warum normalisiert man Datensätze bzw. wie bildet man die erste, zweite und dritte Normalform.

Abschließend: Überlege dir, was du alles machen willst und zerlege dies dann in möglichst viele möglichst kleine Abschnitte. Löse ein Problem nach dem anderen und überlege dir zuerst, wie dein Programm aussehen bzw. ablaufen soll. Das kann man wunderbar auf dem Papier erledigen, z.B. ganz klassisch mit einem Programm-Ablauf-Plan. Hast du die Logik abstrahiert geht die Umsetzung in Programmcode deutlich einfacher.
 
Ja, ich glaube das Problem bei mir ist das (nicht vermeidbare) Halbwissen, das sich mit der Zeit so anstaut.
  • Ich habe bereits 1992 mal programmiert (TuboPascal) musste aber feststellen, dass das mit Objektorientierung so rein gar nichts mehr zu tun hat. Ausserdem vergisst man ja auch das ein oder andere... Also: Blutiger Anfänger
  • Ich habe bereits dieses Projekt und auch komplexere in Access umgesetzt. Datenbanken, Normalisierung, Primärschlüssel, Sekundärschlüssel, Normalformen etc. sind mir nicht ganz fremd. Aber wieder: SQL ist eine andere Welt und damit: Blutiger Anfänger
Manchmal muss man sich eben durchbeissen.
Ergänzung ()

Und sehr schwierig finde ich auch die mit der Zeit gebildeten Konventionen, die sich ja bei jeder Sprache unterscheiden. Was bedeuten Anführungszeichen, welche verwendet man wofür, Freizeichen oder nicht. Erst gestern hatte ich mit einer Fehlermeldung zu kämpfen, weil ich mein Projekt auf einem anderen Rechner weitermachen wollte. Da hatte ich dann einen anderen Editor, der aus Tab einfach 4x Space machte. Wieder 15 Minuten Fehlersuche. Und so etwas lernt man auch nicht. Diese Fehler muss man einfach machen.
 
Zuletzt bearbeitet:
mschrak schrieb:
Ich habe bereits 1992 mal programmiert (TuboPascal) musste aber feststellen, dass das mit Objektorientierung so rein gar nichts mehr zu tun hat.
Kommt natürlich etwas auf die Version an. Aber ab Turbo Pascal 5.5 (Anno 1989) gabs Objektorientierung. Ab Version 6 (Anno 1990) machte man mit Turbo Vision auch sehr rege Gebrauch davon. In den zugehörigen Handbüchern wurde Objektorientierung und deren Umsetzung mit Turbo Pascal auch recht ordentlich erklärt.

mschrak schrieb:
Ich habe bereits dieses Projekt und auch komplexere in Access umgesetzt. Datenbanken, Normalisierung, Primärschlüssel, Sekundärschlüssel, Normalformen etc. sind mir nicht ganz fremd.
Das ist ja schon mal nicht verkehrt.

mschrak schrieb:
Aber wieder: SQL ist eine andere Welt
Mit SQL machst Du das platt gesagt alles nicght per Point&Click, sondern gibst dem Datenbank stattdessen Befehle in Textform. Das ist auch so der beste Weg wenn Du ne Datenbank von woanders her ansprichst. Du kannst ja schlecht in Python sagen "Rufe Access auf und klicke da und da und sag mir dann, was da auf dem Bildschirm steht".
Sowohl die Befehle als auch die Daten müssen in einer Form sein, die die Maschine versteht.
 
mschrak schrieb:
@Tokolosh: 1. Ja, genau das möchte ich. 2. Fluten würde ich das nicht nennen. Aber ja, ich finde das Thema Programmierung recht schwierig in der Herangehensweise und ich kann deutlich besser lernen, wenn ich anhand eines Projekts sehe, wofür die Schritte nötig sind. Ich hatte erst mit einem Python-Buch angefangen, aber dann habe ich mich immer mehr in abstrakten Aussagen verfranst, die ich nicht mehr verstanden habe, ohne zu wissen, wofür sie da sind (Stichwort Objektorientierung, Klassen, Module, ...). Irgendwann ist das ein theoretischer Brei, der einem nichts weiter sagt, ausser eben, man macht einfach mal. So wie ich jetzt hier. Und dabei (nein es ist keine Hausaufgabe) habe ich ein Projekt, was ich ganz gut gebrauchen könnte. 3. Mal anders gefragt: Was würdest Du denn als "Grundlagen" bezeichnen? Wissen wie ein Server funktioniert? Wissen wie Datenbanken funktionieren? Grundlagen der Programmierung? Leider sind all diese Bereiche inzwischen so umfangreich, dass man sich damit monatelang beschäftigen kann, ohne Land zu sehen. Und dann habe ich das erste schon wieder vergessen. Ich bevorzuge Learning by doing. Und die Einzelprobleme, über die ich stolpere kommen aus so unterschielichen Bereichen, dass ich manche Fragestellungen eben einfach nur beantworten möchte, um an anderer Stelle weiterzukommen.
Das war eventuell etwas negativ von mir formuliert, das geb ich zu. So war das eigentlich nicht gewollt ;)
Ich finde es immer löblich, wenn man sich in neue Materie einarbeiten möchte und daran reges Interesse zeigt. Mit "Fluten" war auch nur gemeint, dass ich in den letzten Tagen immer Beiträge mit Fragen zu Themen gelesen habe, die sehr viel Grundkenntnisse voraussetzen und ich wollte darauf hinweisen, dass es vielleicht sinnvoll wäre sich eine Quelle zu suchen, die dieses komplett einmal bearbeiten. JA, das Internet kann undurchsichtig sein, vor allem ist es voll von "Bad Practice"-Beispielen. Um mal das Beispiel mit dem PHPMyAdmin aufzugreifen. Natürlich läuft eine Pythonanwendung auch serverseitig über einen Apache mit der entsprechenden Mod, aber darauf kann man dann nicht wirklich eingehen, weil da so viel anderes Wissen mit dran hängt.
Bei so Aussagen von Leuten in Tutorials, wie "Ja dann installier dir einfach PHPAdmin und gut" bekommt man immer eine kleine Krise, weil das auch zu Hauf in der echten Welt praktiziert wird, ohne, dass Leute verstehen, WAS sie da überhaupt tun.

Ja, Serveradministration und Softwareentwicklung ist nicht mal eben in ein paar Wochen/Monaten zu erlernen, das muss man immer im Hinterkopf behalten. Tutorials folgen kann jeder, aber das ganze dann anzuwenden und die eignen Bedürfnisse anzupassen ist dann immer ein ganz anderes Thema.

Mein Tipp jetzt speziell für deine Anforderung:
Keine IDE benutzen, keine Workbench für SQL, sondern nur eine Konsole. Setz dir eine beliebige Linux-Distribution auf und schreibe kleine Programme in Python z.B. . Klein anfangen, wie aus stdin lesen und nach stout schreiben, sowas eben. Danach kannst du dir angucken, wie man einen MariaDB-Datenbankserver aufsetzt unter Linux in der Konsole. Das ist nämlich gar nicht so wild, wie man anfangs denkt. Dort dann einen User und eine Datenbank anlegen und mit Daten füllen. Vielleicht ein kleines Bash-Script schreiben, dass eine Datenbank löscht und die gleiche wieder erstellt mit Testdaten, so dass du das nicht immer wieder selbst machen musst. Gleichzeitig hättest du die wichtigsten SQL-Befehle "dokumentiert".
Von da aus kann man dann anfangen ein Python-Script zu schreiben, dass Daten aus der Datenbank liest und auf stout ausgibt und so weiter...

Um OOP und Design Patterns etc kann man sich dann immernoch Gedanken machen.

Das klingt vielleicht bescheuert, aber so lernst du am meisten und am besten meiner Meinung nach. Denn so wie ich es verstanden habe ist es auch deine Intention dazuzulernen.

Und das mit Excel habe ich nur geschrieben, um meine Absicht zu verdeutlichen.

Das habe ich auch so verstanden, allerdings war das eben für mich ein Zeichen dafür, dass so gut wie keine Programmierkenntnisse vorhanden waren.
 
Natürlich beabsichtige ich hauptsächlich, dazuzulernen. Und es ist genauso wie Du sagst. Das Internet ist voll von gut gemeinten Ratschlägen und Tutorials, die aber eben häufig das genau falsche vermitteln oder auf einer Basis aufbauen, die man selbst nicht hat. Dazu kommt, dass Google ja offensichtlich das Erscheinungsdatum für die Relevanz rel. egal zu sein scheint. Wie oft habe ich mir eine Problemlösung oder eine Erläuterung durchgelesen, um dann hinterher zu erkennen, dass die von vor >10 Jahren ist und so gar nicht mehr läuft.
 
Der Ansatz zum lernen ist ein tradeoff: Kurse und Bücher werden zuweilen als weniger spannend empfunden. Dafür sind sie in sich geschlossen und du hast an einem Fleck alles was du brauchst.
Ein eigenes Projekt herzunehmen macht den meisten vermutlich mehr Spaß an sich. Die negative Seite ist dir jetzt ja gut bekannt :D.

Ich persönlich hatte in deinem Thread zum Projekt das so verstanden, dass du schon ein paar Übungen gemacht hast. Ich denke den Begriff "Anfänger" kann man verschieden auslegen.

So ganz ohne Erfahrung würde ich persönlich erst einmal dazu raten, kleine Sachen zu programmieren wie man sie in Kursen z.b. vorfindet. Also aufbereitete Aufgaben wo jemand sich vorab Gedanken dazu gemacht hat, was da vermittelt wird und was nötig ist um das ganze zu lösen.
 
Zurück
Oben