Seite 4 von 4
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Mittwoch 16. April 2025, 22:30
von Sirius3
In Python kann man ohne weiteres Variablennamen wiederverwenden. Das ist kein Fehler, den Python anmeckern würde.
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Mittwoch 16. April 2025, 22:51
von __blackjack__
Da beim TorstenVoelker ja schon Vorkenntnisse in PHP bestehen: auch da ist das kein Problem den gleichen Namen nacheinander an verschiedene Werte zu binden. Das sind eigentlich hauptsächlich (reine) funktionale Sprachen oder welche die zumindest teilweise unveränderliche Werte/Objekte erzwingen können, bei denen das nicht gehen könnte.
Wenn das in Python nicht gehen würde, dann könnten ``for``-Schleifen ja beispielsweise gar nicht funktionieren, oder ``while``-Schleifen könnten auch schwierig werden/dadurch eingeschränkt werden. Bei so etwas wie ``while answer != 42:`` *muss* ja der Name in der Schleife neu gebunden werden können, oder das wäre nur ein ``if`` und eine Endlosschleife.
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Donnerstag 17. April 2025, 10:52
von mechanicalStore
@__blackjack__: Wobei in rein funktionalen Sprachen eher rekursive Funktionen statt for / while Schleifen bevorzugt sind (z.B. Scala).
@TorstenVoelker: Da nicht nur Defizite bei SQL, sondern hauptsaechlich auch bei Python vorhanden sind, wuerde ich Dir vorschlagen, erst mal klein anzufangen, um Dir mehr ueber Datenstrukturen und Algorithmen in Python anzueignen. Und eher abstrakt strukturell denken, anstatt in einzelnen 'Anforderungen'. Es ist in der Programmierwelt naemlich egal, ob Du einmal oder zweimal oder aus 100000 mal was abfragen willst. Ebenso oder ob es Kunde1 und Kunde2, oder 100000 Kunden gibt. Das ist programmtechnisch alles dasselbe und davon sollte man abstrahieren, anstatt mit irgendwelchen Versuchen und Einzelideen da ran zu gehen.
Fang doch mal das ganze ohne SQL an und konzentriere Dich fuer den Fall rein auf Python. Das waeren im einfachsten Fall eine Klasse "Kunde", die den Namen und die Kontonummer enthaelt (sowas hast Du ja schon). Dann eine zweite Klasse namens z.B. , "Buchungen", die 'kontonummer_von', 'kontonummer_nach', 'zahlung', 'betrag' und 'datum' enthaelt. Die haengst Du dann als Liste unter die Kunden-Klasse. Dann schreibst Du Dir ein einfaches textbasiertes Menue mit 5 Eintraegen 'Kunde anlegen", 'Buchung ausfuehren', 'Alle Kunden anzeigen', "alle Buchungen eines Kunden anzeigen' und 'Exit'. Zu jedem dieser Eintraege schreibst Du eine Funktion. Beim Buchen von / nach wird das jeweils bei Beiden eingetragen, was dem einen seine Ueberweisung, ist dem anderen seine Einzahlung und vice versa. Ebenso die Betraege dann +/- entsprechend. Den aktuellen Kontostand kannst Du entweder in der Kundenklasse festhalten (was aber semantisch falsch waere), oder Du rechnest ihn ueber alle Buchungen jeweils aus. Kannst Dir ja beim Erstellen des Kunden eine erste Buchung mit einem Wunschbetrag Deiner Wahl goennen.

Und wenn Du *das* am Laufen hast, *dann* kannst Du mal gucken, wie Du den sql-Krempel oben drauf packst.
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Donnerstag 17. April 2025, 12:23
von __blackjack__
@mechanicalStore: Bei rein funktionalen Sprachen kann es ``for``- und ``while``-Schleifen im Sinne von imperativen Programmiersprachen ja gar nicht geben — genau das war ja mein Punkt. Und Scala ist keine rein funktionale Sprache.
@TorstenVoelker: Noch mal zum Thema Vorwürfe: Du siehst vielleicht auch zu viel als Vorwurf. Statt als konstruktive Kritik und als ernstgemeinte Fragen. Eine Frage „Warum hast Du …?“ ist ja nicht automatisch ein Vorwurf und damit eher rhetorisch im Sinne von „Warum hast Du nur? Wie konntest Du nur?“ sondern durchaus ernst gemeint, das wir nicht verstehen was der Grund für etwas ist was Du gemacht hast, das aber wissen müssten um zu verstehen wo das Verständnisproblem bei Dir liegt. Oder halt auch eine Anregung für Dich mal wirklich darüber nachzudenken warum Du etwas so und nicht anders gemacht hast. Erkenntnisgewinn ergibt sich auch aus Fragen die gestellt werden, und über die man nachdenkt und zu einer Antwort kommt. Eher nicht wenn man die einfach als Vorwurf auffasst und der Frage nicht weiter nachgeht.
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Donnerstag 17. April 2025, 17:13
von mechanicalStore
@__blackjack__: Hast Recht. Scala ist nicht rein funktional, daher geht da ja auch Beides. Trotzdem wird da, soweit ich mal irgendwo gelesen habe, nicht gerne gesehen, wenn man nicht rekursiv programmiert. Kann aber auch ein Mythos sein.
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Donnerstag 17. April 2025, 17:29
von TorstenVoelker
Ich habe mein Problem gelöst , es war einfach ein Denk Fehler drin .
Habe jetzt vor mich weiter mit Klassen zu beschäftigen , aber ohne sql und mal schauen das ich langsam mich daran Taste .
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Donnerstag 17. April 2025, 17:54
von noisefloor
Hallo,
Was aber in diesem Zu wenig erklärt wird ist die Zusammenarbeit mit MySQL .
Da gibt es auch nicht viel zu erklären: du bindest ein passendes Python-Modul für MySQL ein und nutzt dessen Klassen und Methoden. Punkt. Ginge genau so, wenn du MariaDB oder SQLite oder PostgreSQL oder ... nutzten würdest. Die enge Kopplung wie bei PHP gibt es _nicht_.
Alle Python-Module für relationale Datenbanken folgen normalerweise der Python DB-API 2.0. Die muss man nicht im Detail kennen, hier reicht - und das wurde dir mehrfach gezeigt - wie man SQL-Abfragen im WHERE-Clause parametrisiert (um SQL Injections zu vermeiden). Ansonsten ist SQL SQL - daran ändert auch Python nichts. Als Ergebnis erhältst du eine Python Datenstruktur, bei `fetchall()` entweder eine Liste von Listen oder ein Tupel von Listen. Darauf kannst du Zugreifen, drüber iterieren etc. Dazu ist es aber wichtig, dass man die Grunddatenstrukturen in Python verstanden hat.
Wurde auch schon mal gesagt: zu Lernen bietet sich hier SEHR an, dass Kapitel in der Python Doku zu SQLite zu lesen, weil da mehr Grundlagen erklärt werden. Davon lässt sich viel auf MySQL bzw. das entsprechende Python-Modul übertragen. Nur das MySQL - warum auch immer - %s als Platzhalter nimmt.
Gruß, noisefloor
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Freitag 18. April 2025, 20:08
von narpfel
__blackjack__ hat geschrieben: ↑Donnerstag 17. April 2025, 12:23
@mechanicalStore: Bei rein funktionalen Sprachen kann es ``for``- und ``while``-Schleifen im Sinne von imperativen Programmiersprachen ja gar nicht geben — genau das war ja mein Punkt. Und Scala ist keine rein funktionale Sprache.
Gewagte Aussage.
Eine `for`-Schleife ist ja eigentlich nichts anderes als ein bisschen Syntaxzucker für
`traverse_`, wenn man monadic IO hat.
Und `while` lässt sich auch relativ einfach ohne neuzuweisbare Variablen formulieren:
Code: Alles auswählen
def while(state, cond, body):
if cond(state):
new_state = body(state)
while(new_state, cond, body)
while(0, lambda n: n < 10, lambda n: n + 1)
Und dann gibt es auch noch Futhark: Eine rein funktionale Sprache, die keine Rekursion unterstützt, dafür aber `for`- und `while`-Schleifen:
https://futhark-lang.org/examples/loops.html
Re: Einzelne Felder einer MySQL Tabelle auslesen
Verfasst: Freitag 18. April 2025, 22:05
von __blackjack__
@narpfel: Wenn es rekursiv formuliert ist, dann ist es ja keine ``while``-Schleife mehr im Sinne von imperativen Programmiersprachen. Klar kann man das immer alles funktional umformulieren, aber es geht ja gerade darum das man es nicht mit neu zuweisbaren Variablen formulieren kann. Es geht nicht ums Ergebnis, sondern darum wie man da ausdrückt und wie man über das Problem/die Lösung nachdenkt.