__blackjack__ hat geschrieben: ↑Mittwoch 26. Februar 2025, 22:34 @TorstenVoelker: Da fehlt halt immer noch die Klammer in der SQL-Anweisung.
Daten Eintragen in die Mysql Datenbank Scheitert.
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Das Thema hatte ich ja gestern und heute schon .
Ich kann da keine 2 klammer hinmachen.
Es kommt dann ein Syntax fehler wo er an der Klammer schon in Rot angibt ,fehler.
Sei mal so lieb und Probiere es malselber aus , wenn Du eine Datenbank hast ,nur mit Deiner abgleichen dann siehst Du das es nicht funktionert .
Habe auch schon versucht und geschaut ob die Klammer falsch ist aber ne .
Das da eine fehlt ist mir ja auch erst aufgefallen wo man mir das geschrieben hat ,aber dann Startet das Programm überhaubt nicht.
Weil das fenster kann ich ja öffnen die Gui nur sobald ich den namen absenden will kommt der großße Fehler wie oben beschrieben.
Ich weiß jetzt nicht mehr weiter und werde das Thema beenden weil drehe mich ja nur im Kreis .
Ich kann da keine 2 klammer hinmachen.
Es kommt dann ein Syntax fehler wo er an der Klammer schon in Rot angibt ,fehler.
Sei mal so lieb und Probiere es malselber aus , wenn Du eine Datenbank hast ,nur mit Deiner abgleichen dann siehst Du das es nicht funktionert .
Habe auch schon versucht und geschaut ob die Klammer falsch ist aber ne .
Das da eine fehlt ist mir ja auch erst aufgefallen wo man mir das geschrieben hat ,aber dann Startet das Programm überhaubt nicht.
Weil das fenster kann ich ja öffnen die Gui nur sobald ich den namen absenden will kommt der großße Fehler wie oben beschrieben.
Ich weiß jetzt nicht mehr weiter und werde das Thema beenden weil drehe mich ja nur im Kreis .
- pillmuncher
- User
- Beiträge: 1527
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@TorstenVoelker: Also so schwierig ist das a wirklich nicht:Andgenommen name == "Torsten", dann wird das SQL statement zu:und da fehlt ganz offensichtlich eine schließende Klammer.
Um das zu richten, hast du vermutlich hast das hier versucht:und das ist offensichtlich falsch, weil das eine schließende Klammer zuviel IM PYTHON CODE ist, nicht IM SQL CODE der IN FORM EINES STRINGS vorliegt, weswegen die Klammer ebenfalls IN DEN STRING eigefügt werden muss. Richtig daher wäre das hier:
Code: Alles auswählen
my_cursor.execute("INSERT INTO bank (kontoname) VALUES (%s", [name])
Code: Alles auswählen
INSERT INTO bank (kontoname) VALUES ("Torsten"
Um das zu richten, hast du vermutlich hast das hier versucht:
Code: Alles auswählen
|
v
my_cursor.execute("INSERT INTO bank (kontoname) VALUES (%s", [name]))
^
|
Code: Alles auswählen
|
v
my_cursor.execute("INSERT INTO bank (kontoname) VALUES (%s)", [name])
^
|
In specifications, Murphy's Law supersedes Ohm's.
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
@pillmuncher, werde lch heute Abend mal testen. Ja habe das so gemacht wie du im Bild schön dargestellt hast . Am Ende .
Ich weiß nicht ob ich das schon gemacht hatte .
Weil man probiert ja viel aus wenn man merkt das da was fehlt .
Ich habe lange viel mit php gemacht und bin seit 1 Monat dabei Python zu lernen .
Sind schon 2 Welten .
Aber da man in 1 Monat grade mal die Grundkenntnisse lernt und kennt will man sich ja steigern und man merkt das man immer neu gefordert wird .
Habe 2 Bücher geholt eins davon von Florian dalwigk und eins heißt Python 3 .
Man lernt die Grundkenntnisse aber das richtige programmieren lernt man nach und nach aus eigener Erfahrung die man aufschnappt und umsetzt das sogenannte OOP .
Ich weiß nicht ob ich das schon gemacht hatte .
Weil man probiert ja viel aus wenn man merkt das da was fehlt .
Ich habe lange viel mit php gemacht und bin seit 1 Monat dabei Python zu lernen .
Sind schon 2 Welten .
Aber da man in 1 Monat grade mal die Grundkenntnisse lernt und kennt will man sich ja steigern und man merkt das man immer neu gefordert wird .
Habe 2 Bücher geholt eins davon von Florian dalwigk und eins heißt Python 3 .
Man lernt die Grundkenntnisse aber das richtige programmieren lernt man nach und nach aus eigener Erfahrung die man aufschnappt und umsetzt das sogenannte OOP .
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@TorstenVoelker: Das sind keine zwei Welten. Nicht bei *diesem* Fehler, denn auch in PHP gibt man SQL-Anweisungen aus PHP-Sicht als Zeichenkette an, und da hätte man genau das gleiche Problem gehabt und auf genau die gleiche Art gelöst und auch einen Fehler bekommen wenn man eine unnötige zusätzliche Klammer im PHP-Code geschrieben hätte.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
@pillmuncher , Ja es hat Funktioniert ,Danke nochmals , was ich noch lernen muss ist wo ich zb die StringVar hinsetze .
Weil habe das noch nicht ganz verstanden.
Das muss ich noch lernen weil da habe ich auch meine Probleme.
Kleines Beispiel , wenn ich es mit einer With Anweisung mache .
Weil habe das noch nicht ganz verstanden.
Das muss ich noch lernen weil da habe ich auch meine Probleme.
Kleines Beispiel , wenn ich es mit einer With Anweisung mache .
Code: Alles auswählen
from contextlib import closing
from tkinter import *
import tkinter as tk
from tkinter import StringVar
import mysql.connector
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
def send_pupil(name):[color=#BF0000]<<<<<---- Dann wird hier in der Variable die ich mitgebe ein unterstich angezeigt . [/color]
with closing (mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="root",
password="Password@123",
database="login",
auth_plugin="mysql_native_password",
)
)as connection:
with closing(
connection.cursor()
)as cursor:
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s)",[name])
connection.commit()
name = StringVar() <<<<----- [b][color=#FF0000]#Wenn ich es hier hin packe oder auch über die Function passiert nix .[/color][/b]
user_info = tk.LabelFrame(frame , text="Lamda Funktion Test",padx=20,pady=20)
user_info.grid(row=0,column=0)
firstname = tk.Label(user_info,text="Name", textvariable=name)
firstname.grid(row=0,column=0)
first_entry = tk.Entry(user_info).grid()
btn = tk.Button(user_info,text="Absenden",command=lambda : send_pupil(name.get()))
btn.grid(row=1,column=1)
root.mainloop()
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@TorstenVoelker: Ein Unterstrich ist das hier: _
Das ist wohl eher nicht was passiert, sondern dass Dein Editor oder Deine IDE den Funktionsparameter `name` unterstreicht. Da solltest Du jetzt als erstes mal heraus finden wo in Deiner IDE oder Deinem Editor der Text für solche Warnungen oder Fehlermarkierungen steht, denn das wird nicht einfach nur Unterstrichen, sondern da gibt es auch einen Hinweis *warum* das unterstrichen wird.
Das sollte verschwinden wenn auf Modulebene keine Variablen mehr definiert werden. Da gehört nur Code hin der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
(Das heisst übrigens „lambda“ mit einem „b“.)
Das ist wohl eher nicht was passiert, sondern dass Dein Editor oder Deine IDE den Funktionsparameter `name` unterstreicht. Da solltest Du jetzt als erstes mal heraus finden wo in Deiner IDE oder Deinem Editor der Text für solche Warnungen oder Fehlermarkierungen steht, denn das wird nicht einfach nur Unterstrichen, sondern da gibt es auch einen Hinweis *warum* das unterstrichen wird.
Das sollte verschwinden wenn auf Modulebene keine Variablen mehr definiert werden. Da gehört nur Code hin der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
(Das heisst übrigens „lambda“ mit einem „b“.)
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
@TorstenVoelker: die üblichen Fehler, wenn man aus Büchern lernt, die einem kein gutes Python beibringen.
*-Importe sind schlecht, weil damit unkontrolliert alle Name des Moduls in den eigenen Namensraum schaufelt.
Globale Variablen sind schlecht, weil sich einzelne Teile des Codes nicht mehr sauber getrennt anschauen lassen, was Testen und Fehlersuche erschwert.
Üblicherweise importiert man entweder das gesamte Modul oder Teile daraus, nicht beides gleichzeitig.
Der Name send_pupil ist seltsam, ich hätte jetzt etwas wie open_bank_account erwartet.
Sowas wie username oder host sollten nicht als Strings direkt irgendwo in einer Funktion stehen, sondern als Konstanten am Anfang des Programms, damit man solche oft zu ändernden Werte leicht findet.
Objekte, die man nicht mehr braucht, müssen nicht unbedingt an Namen gebunden werden, das ist bei Labels oft der Fall.
Bei `first_entry` hast Du den Fehler gemacht, dass Du das Ergebnis der `grid`-Methode speicherst, was aber immer None ist. Außerdem fehlt da noch `textvariable`, Du willst ja irgendwo Deinen Namen auch ändern können.
Das ganze könnte also so aussehen:
*-Importe sind schlecht, weil damit unkontrolliert alle Name des Moduls in den eigenen Namensraum schaufelt.
Globale Variablen sind schlecht, weil sich einzelne Teile des Codes nicht mehr sauber getrennt anschauen lassen, was Testen und Fehlersuche erschwert.
Üblicherweise importiert man entweder das gesamte Modul oder Teile daraus, nicht beides gleichzeitig.
Der Name send_pupil ist seltsam, ich hätte jetzt etwas wie open_bank_account erwartet.
Sowas wie username oder host sollten nicht als Strings direkt irgendwo in einer Funktion stehen, sondern als Konstanten am Anfang des Programms, damit man solche oft zu ändernden Werte leicht findet.
Objekte, die man nicht mehr braucht, müssen nicht unbedingt an Namen gebunden werden, das ist bei Labels oft der Fall.
Bei `first_entry` hast Du den Fehler gemacht, dass Du das Ergebnis der `grid`-Methode speicherst, was aber immer None ist. Außerdem fehlt da noch `textvariable`, Du willst ja irgendwo Deinen Namen auch ändern können.
Das ganze könnte also so aussehen:
Code: Alles auswählen
from contextlib import closing
import tkinter as tk
import mysql.connector
MYSQL_HOST = "127.0.0.1"
MYSQL_PORT = 3306
MYSQL_USER = "root"
MYSQL_PASSWORD = "Password@123"
MYSQL_DATABASE = "login"
def open_bank_account(name):
with closing(
mysql.connector.connect(
host=MYSQL_HOST,
port=MYSQL_PORT,
user=MYSQL_USER,
password=MYSQL_PASSWORD,
database=MYSQL_DATABASE,
auth_plugin="mysql_native_password",
)
) as connection:
with closing(connection.cursor()) as cursor:
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s)", [name])
connection.commit()
def main():
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
name = tk.StringVar(root)
user_info = tk.LabelFrame(frame, text="Lambda Funktion Test", padx=20, pady=20)
user_info.grid(row=0, column=0)
tk.Label(user_info, text="Name").grid(row=0, column=0)
tk.Entry(user_info, textvariable=name).grid(row=0, column=1)
tk.Button(
user_info, text="Absenden", command=lambda: open_bank_account(name.get())
).grid(row=1, column=1)
root.mainloop()
if __name__ == "__main__":
main()
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Erstmal Danke für die Super Erkläung Euch 2 .
Wie gesagt habe mir lange Überlegt was ich lernen möchte ,also welche Programmiersprache .
Wo ich dann sagte ok es soll Python sein habe ich mir
als Zweites überlegt wie lerne ich , so kam mir der Sinn ein Buch zu kaufen aber ich merkte das einige Codes garnicht funktionieren oder wenn mit fehler was mich sehr aus der Bahn warf.
Mir sagte man man muss erstmal die Grundkenntnisse lernen dann sich langsam ran Arbeiten.
Lerne viel über You Tube oder hier im Forum .
Wie das Thema
if __name__ == "__main__":
main()
Hab mich lange damit beschäftigt aber heute noch nicht den Durchblick weil es kaum erklärt wird meist nur das man sieht wie es geschrieben wird was dann passiert
aber nicht den Sinn .
Wie gesagt habe mir lange Überlegt was ich lernen möchte ,also welche Programmiersprache .
Wo ich dann sagte ok es soll Python sein habe ich mir
als Zweites überlegt wie lerne ich , so kam mir der Sinn ein Buch zu kaufen aber ich merkte das einige Codes garnicht funktionieren oder wenn mit fehler was mich sehr aus der Bahn warf.
Mir sagte man man muss erstmal die Grundkenntnisse lernen dann sich langsam ran Arbeiten.
Lerne viel über You Tube oder hier im Forum .
Wie das Thema
if __name__ == "__main__":
main()
Hab mich lange damit beschäftigt aber heute noch nicht den Durchblick weil es kaum erklärt wird meist nur das man sieht wie es geschrieben wird was dann passiert
aber nicht den Sinn .
Hinter steckt nicht viel. __name__ enthält den Namen des Moduls, wenn es importiert wird und den String "__main__" wenn die Datei direkt ausgeführt wird.
Es wird also sichergestellt, dass main nur dann aufgerufen wird, wenn die Datei direkt ausgeführt wird, und nicht, wenn sie als Modul importiert wird.
Das hat den Vorteil, dass man die Datei auch als Modul benutzen kann, zum Beispiel für Unit-Tests.
Code: Alles auswählen
if __name__ == "__main__":
main()
Es wird also sichergestellt, dass main nur dann aufgerufen wird, wenn die Datei direkt ausgeführt wird, und nicht, wenn sie als Modul importiert wird.
Das hat den Vorteil, dass man die Datei auch als Modul benutzen kann, zum Beispiel für Unit-Tests.
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Ah ok. Danke für die Information.
Eine Sache noch bitte das ich es mal richtig verstehe .
Wenn ich mehrere Variable habe zb Name , Ort etc. das in in die String val wie oben definiere und in der Funktion die mitgebe
Es in in der Datenbank so hinzufügen ?
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s,%s)", [name], [ort])
connection.commit()
Ich hoffe ich habe es richtig verstanden .
Bin schon echt am überlegen mal ein Kurs zu besuchen .
Eine Sache noch bitte das ich es mal richtig verstehe .
Wenn ich mehrere Variable habe zb Name , Ort etc. das in in die String val wie oben definiere und in der Funktion die mitgebe
Es in in der Datenbank so hinzufügen ?
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s,%s)", [name], [ort])
connection.commit()
Ich hoffe ich habe es richtig verstanden .
Bin schon echt am überlegen mal ein Kurs zu besuchen .
Zwei Fehler: Dein INSERT-Befehl enthält nur einen Feldnamen, aber Platzhalter für zwei Werte.TorstenVoelker hat geschrieben: ↑Freitag 28. Februar 2025, 17:16
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s,%s)", [name], [ort])
connection.commit()
Ich hoffe ich habe es richtig verstanden .
Und Du gibst für diese beiden Werte zwei Listen mit je einem Element an, das kracht sofort mit dieser Fehlermeldung:
"TypeError: execute expected at most 2 arguments, got 3"
Wenn die beiden Werte in eine Liste gesteckt werden (deshalb will die execute-Funktion ja eine Liste und nicht einfach einen Wert), dann bemerkt SQLite den anderen Fehler und sagt:
"sqlite3.OperationalError: near "%": syntax error".
Zugegebenermaßen nicht ganz so leicht zu durchschauen.
Ein korrekter Aufruf wäre dieser:
Code: Alles auswählen
cursor.execute("INSERT INTO bank (kontoname, bankort) VALUES (%s, %s)", [name, ort])
connection.commit()
Code: Alles auswählen
cursor.execute("INSERT INTO bank (kontoname) VALUES (%s)", [f"{name} {ort}"])
connection.commit()
-
- User
- Beiträge: 2
- Registriert: Donnerstag 28. November 2024, 23:26
Hallo TorstenVoelker,
So, wie Du mit den Büchern bisher nur bedingt zurecht kommst, sind die Chancen einen Kurs effektiv nutzen zu können, vermutlich auch (noch) nicht gut. Dito IMHO.
Zweifellos hat da aber auch jeder seinen eigenen Weg zu lernen.
Hier über das Forum gibt es eine Menge Input aber auch viele nützliche Links zu einschlägigen Quellen. Allen voran (immer wieder):
https://www.python.org/
https://docs.python.org/3/tutorial/index.html
https://pytude.readthedocs.io/de/latest/
https://peps.python.org/pep-0008/
Weiter gibt es hier eine Rubrik, wo laufend frei verfügbares Material, Bücher (PDF), publiziert / verlinkt wird. Meist ältere Ausgaben, aber deshalb nicht unbrauchbar.
viewtopic.php?t=47340 (packtpub free learning)
Das lohnt auf jeden Fall auch mal durchstöbert zu werden.
Kürzlich wurde hier im Forum über einen Online-Kurs an einer US-Uni geschrieben. Vielleicht findet jemand den Link und ergänzt das hier noch mal. Da ging es aber nicht primär um Python, sondern um das Lernen, wie man programmiert.
Bei mir lief der Einstieg über Raspi-Bastelleien. Entsprechend habe ich mir einiges an Literatur aus dieser Richtung beschafft. Solche Literatur würde Dir mangels zugehöriger Hardware nicht wirklich nützen, aber auch über den Weg kann man den Einstieg hinbekommen.
Zudem habe ich einiges an anderen Grundlagen, beispielsweise über relationale Datenbanken und SQL-Kenntnisse. Das hilft schon sehr, wenn man das 'nur noch' auf Anwendung in Python adaptieren muss.
Obwohl ich inzwischen gelegentlich mit Python kleine Projekte (für mich) entwickle, würde ich mich immer noch auch nach mehr als 3 Jahren als Newbie bezeichnen. Das ist neben anderen Aspekten auch schlicht eine Zeitfrage.
Neben den schon genannten Quellen haben mir folgende Bücher den einen oder anderen Weg geebnet:
Impractical Python Projects, Lee Vaughan
Automate The Boring Stuff With Python, Al Sweigart
Ich empfinde US-Literatur oft als eingängiger, daher diese Quellen. Zweitens war ich auf der Suche nach Lösungen für administrative Aufgaben und wollte so etwas wie ein Cookbook zur Hand haben.
.. und auch ein Buch aus dem Rheinwerk-Verlag:
Python Der Grundkurs, Michael Kofler
Letzteres ist eher referenzartig aufgebaut und damit in Papier eine Teilmenge von dem, was auch https://docs.python.org/3/tutorial/index.html liefert.
Vielleicht ist noch die eine oder andere Anregung dabei.
In diesem Sinne,
Plutomikation
Fraglich, ob das zum jetzigen Zeitpunkt das erwünschte Ergebnis bringen würde. IMHO.Bin schon echt am überlegen mal ein Kurs zu besuchen .
So, wie Du mit den Büchern bisher nur bedingt zurecht kommst, sind die Chancen einen Kurs effektiv nutzen zu können, vermutlich auch (noch) nicht gut. Dito IMHO.
Zweifellos hat da aber auch jeder seinen eigenen Weg zu lernen.
Hier über das Forum gibt es eine Menge Input aber auch viele nützliche Links zu einschlägigen Quellen. Allen voran (immer wieder):
https://www.python.org/
https://docs.python.org/3/tutorial/index.html
https://pytude.readthedocs.io/de/latest/
https://peps.python.org/pep-0008/
Weiter gibt es hier eine Rubrik, wo laufend frei verfügbares Material, Bücher (PDF), publiziert / verlinkt wird. Meist ältere Ausgaben, aber deshalb nicht unbrauchbar.
viewtopic.php?t=47340 (packtpub free learning)
Das lohnt auf jeden Fall auch mal durchstöbert zu werden.
Kürzlich wurde hier im Forum über einen Online-Kurs an einer US-Uni geschrieben. Vielleicht findet jemand den Link und ergänzt das hier noch mal. Da ging es aber nicht primär um Python, sondern um das Lernen, wie man programmiert.
Bei mir lief der Einstieg über Raspi-Bastelleien. Entsprechend habe ich mir einiges an Literatur aus dieser Richtung beschafft. Solche Literatur würde Dir mangels zugehöriger Hardware nicht wirklich nützen, aber auch über den Weg kann man den Einstieg hinbekommen.
Zudem habe ich einiges an anderen Grundlagen, beispielsweise über relationale Datenbanken und SQL-Kenntnisse. Das hilft schon sehr, wenn man das 'nur noch' auf Anwendung in Python adaptieren muss.
Obwohl ich inzwischen gelegentlich mit Python kleine Projekte (für mich) entwickle, würde ich mich immer noch auch nach mehr als 3 Jahren als Newbie bezeichnen. Das ist neben anderen Aspekten auch schlicht eine Zeitfrage.
Neben den schon genannten Quellen haben mir folgende Bücher den einen oder anderen Weg geebnet:
Impractical Python Projects, Lee Vaughan
Automate The Boring Stuff With Python, Al Sweigart
Ich empfinde US-Literatur oft als eingängiger, daher diese Quellen. Zweitens war ich auf der Suche nach Lösungen für administrative Aufgaben und wollte so etwas wie ein Cookbook zur Hand haben.
.. und auch ein Buch aus dem Rheinwerk-Verlag:
Python Der Grundkurs, Michael Kofler
Letzteres ist eher referenzartig aufgebaut und damit in Papier eine Teilmenge von dem, was auch https://docs.python.org/3/tutorial/index.html liefert.
Vielleicht ist noch die eine oder andere Anregung dabei.
In diesem Sinne,
Plutomikation
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Danke für die Zeit die Sie sich genommen haben .
Ja ich habe vor 18 Jahren mit PHP angefangen und dann damit 3 Jahre gearbeitet und ich habe dann lange Zeit nichts mehr gemacht . Jetzt wenn man schaut hat sich vieles verändert mit dem Code früher sql jetzt sqli.
Ich habe es damals mit Bücher gelernt und lern dvds weil YouTube Tutorial sowas war damals noch ein Fremdwort.
Ich wollte vor Python mit Java anfangen aber habe mich erkundigt und erfahren das Python leichter zu lernen ist und simpel. Naja kann man man sehen wie man will . Am Anfang ist jede Programmiersprache sehr schwer zu erlernen grade wenn man nicht jeden Tag Stunden Zeit hat am pc zu sitzen und zu lernen . Man hat ja auch noch ein Beruf und Familie .
Ja ich habe vor 18 Jahren mit PHP angefangen und dann damit 3 Jahre gearbeitet und ich habe dann lange Zeit nichts mehr gemacht . Jetzt wenn man schaut hat sich vieles verändert mit dem Code früher sql jetzt sqli.
Ich habe es damals mit Bücher gelernt und lern dvds weil YouTube Tutorial sowas war damals noch ein Fremdwort.
Ich wollte vor Python mit Java anfangen aber habe mich erkundigt und erfahren das Python leichter zu lernen ist und simpel. Naja kann man man sehen wie man will . Am Anfang ist jede Programmiersprache sehr schwer zu erlernen grade wenn man nicht jeden Tag Stunden Zeit hat am pc zu sitzen und zu lernen . Man hat ja auch noch ein Beruf und Familie .
Allerdings gilt es auch zu bedenken, das Python zunächst eine Terminal basierte Programmiersprache ist. Mysql ist als Datenbank schon nicht mehr direkt Python. Und die GUI- Programmierung ist noch mal was anderes. Tkinter ist eine Brücke zu einem TCL-Toolkit...
Deshalb benötigt man z.B. ja auch die tk.StringVar, weil TCL Strings sich von Strings in Python unterscheiden...
Deshalb benötigt man z.B. ja auch die tk.StringVar, weil TCL Strings sich von Strings in Python unterscheiden...
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Danke für die nette Info , werde jetzt erstmal mich mit diesem Thema mich sehr auseinandersetzen bevor ich das nächste Kapitel angehe .
Mein Ziel ist es , erstmal ein Login Script zu bauen wo jeder der sich einloggt sein privaten Terminkalender hat und möchte es dann nach und nach erweitern .
Sowas hatte ich damals in php gehabt .
Der Vorteil , was heißt Vorteil aber ich wusste es gab die Session wo jeder User der eingeloggt war gespeichert war und damit konnte man dann Arbeiten. In Python wird es anders sein was ich annehme und das ist mein nächste Level mich damit auseinandersetzen. Wenn das alles dann sitzt kommen die Termin Einträge etc .
Wird noch ein langer Weg sein .
Mein Ziel ist es , erstmal ein Login Script zu bauen wo jeder der sich einloggt sein privaten Terminkalender hat und möchte es dann nach und nach erweitern .
Sowas hatte ich damals in php gehabt .
Der Vorteil , was heißt Vorteil aber ich wusste es gab die Session wo jeder User der eingeloggt war gespeichert war und damit konnte man dann Arbeiten. In Python wird es anders sein was ich annehme und das ist mein nächste Level mich damit auseinandersetzen. Wenn das alles dann sitzt kommen die Termin Einträge etc .
Wird noch ein langer Weg sein .
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@TorstenVoelker: Jetzt geht das schon wieder los. Login macht keinen Sinn bei lokalen Anwendungen. Die Benutzer haben sich bereits beim Betriebssystem angemeldet. Die sind da schon in einer Session. Es gibt ein Rechtesystem mit dem man regeln kann, welcher Benutzer auf welche Dateien und Ordner zugreifen kann, und das ist normalerweise schon so eingerichtet, dass jeder Benutzer sein eigenes Heimatverzeichnis hat.
Wenn man einen Datenbankserver hat, und dort Teile von Datensätzen in den gleichen Tabellen vor dem Blick verschiedener Nutzer schützen möchte, muss man dafür eine eigene Serveranwendung schreiben, welche die Benutzer und Zugriffe regelt, und mit der die Clientanwendung spricht, statt direkt auf die Datenbank zuzugreifen.
Als Schnittstelle zwischen Client und Server würde sich Webdav anbieten, bevor man da etwas eigenes erfindet. Und dann kann man sich den Client vielleicht sogar sparen, weil Kalenderanwendungen die mit einem Webdav-Server arbeiten, gibt es ja schon. Oder man setzt sich einen Webdav-Server auf, die gibt's ja auch schon, und schreibt einen Client selbst.
Wenn man einen Datenbankserver hat, und dort Teile von Datensätzen in den gleichen Tabellen vor dem Blick verschiedener Nutzer schützen möchte, muss man dafür eine eigene Serveranwendung schreiben, welche die Benutzer und Zugriffe regelt, und mit der die Clientanwendung spricht, statt direkt auf die Datenbank zuzugreifen.
Als Schnittstelle zwischen Client und Server würde sich Webdav anbieten, bevor man da etwas eigenes erfindet. Und dann kann man sich den Client vielleicht sogar sparen, weil Kalenderanwendungen die mit einem Webdav-Server arbeiten, gibt es ja schon. Oder man setzt sich einen Webdav-Server auf, die gibt's ja auch schon, und schreibt einen Client selbst.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Sorry , da war ja was, das hatte ich vergessen .
Tut mir leid!
Tut mir leid!
-
- User
- Beiträge: 124
- Registriert: Mittwoch 5. Februar 2025, 12:55
Hallo Ihr lieben ,
habe mir die letzten tage immer wieder die Scripts angeschaut von Euch um mal zu sehen was passiert eigentlich um zu sehen wozu das alles steht, sowie Dokus im Internet.
Jetzt habe ich mir aus freier hand ein script geschrieben wo Daten in einer Datenbak gespeichert werden soll.
So sieht es gut aus nur das in der Funktion die Parameter gelb unterstrichen sind , wenn ich unten die String Vars verschiebe dann sind die Parameter weiß aber dann sind unten in der Lambda und in der Textvariable die Parameter name oder datum rot unterstrichen .
Sorry wegen derr Rechtschreibung .
Weiß keinen Rat mehr .
Liegt das an mir oder an die Einrückung selber ?
habe mir die letzten tage immer wieder die Scripts angeschaut von Euch um mal zu sehen was passiert eigentlich um zu sehen wozu das alles steht, sowie Dokus im Internet.
Jetzt habe ich mir aus freier hand ein script geschrieben wo Daten in einer Datenbak gespeichert werden soll.
So sieht es gut aus nur das in der Funktion die Parameter gelb unterstrichen sind , wenn ich unten die String Vars verschiebe dann sind die Parameter weiß aber dann sind unten in der Lambda und in der Textvariable die Parameter name oder datum rot unterstrichen .
Sorry wegen derr Rechtschreibung .
Weiß keinen Rat mehr .
Liegt das an mir oder an die Einrückung selber ?
Code: Alles auswählen
import tkinter as tk
from contextlib import closing
from tkinter import ttk
import mysql.connector
from tkinter import StringVar
def open_los(name,datum,uhr,notiz):
with closing(
mysql.connector.connect(
host="127.0.0.1",
user="root",
password="Password@123",
database="login",
port=3306,
auth_plugin="native_password",
)
)as conn:
with closing(
conn.cursor()) as cursor:
cursor.execute("INSERT INTO kalender (name,datum,uhr,notiz) VALUES (%s,%s,%s,%s)",[name,datum,uhr,notiz])
root = tk.Tk()
root.title("Haushalt Plan")
root.geometry("800x600")
tabcontrol = ttk.Notebook(root)
name = tk.StringVar(root)
datum = tk.StringVar(root)
uhr = tk.StringVar(root)
notiz = tk.StringVar(root)
tab1 = ttk.Frame(tabcontrol)
tab2 = ttk.Frame(tabcontrol)
tab3 = ttk.Frame(tabcontrol)
tab4 = ttk.Frame(tabcontrol)
tabcontrol.add(tab1, text="Willkommen")
tabcontrol.add(tab2, text="Termin hinzufügen")
tabcontrol.add(tab3, text="Termin Übersicht")
tabcontrol.add(tab4, text="Beenden")
tabcontrol.pack(expand=1,fill="both")
#Tab1 Daten
start = ttk.Label(tab1,text="Herzlich Willkommen in Deinem Portal,\n\n hier kannst Du Deine Termin eintragen und verwalten.\nAusserdem kannst Du auch Demnächst Email versenden.",font=("arial",12)).grid(row=0,column=2,padx=250,pady=120)
end = ttk.Label(tab4,text="Programm Beenden ?",font=("arial",12))
end.grid(row=0,column=0,padx=250,pady=120)
btn1 = ttk.Button(tab4,text="Jetzt Beenden",command=close)
btn1.grid(row=1,column=0)
#tab 2 Daten
user_label = ttk.Label(tab2,text="Neuen Termin oder Notiz eingeben",font=("arial",12))
user_label.grid(row=0,column=0,padx=25,pady=25)
name_first = ttk.Label(tab2,text="Name des Eintrags :")
name_first.grid(row=1,column=0)
name_entry = ttk.Entry(tab2,width=254,textvariable=name)
name_entry.grid(row=1,column=1)
first_tag = ttk.Label(tab2,text="Datum :")
first_tag.grid(row=2,column=0)
tag_entry = ttk.Entry(tab2,width=25,textvariable=datum)
tag_entry.grid(row=2,column=1)
first_uhr = ttk.Label(tab2,text="Uhrzeit :")
first_uhr.grid(row=3,column=0)
uhr_entry = ttk.Entry(tab2,width=25,textvariable=uhr)
uhr_entry.grid(row=3,column=1)
first_notiz = ttk.Label(tab2,text="Notiz hinzufügen ? :")
first_notiz.grid(row=4,column=0)
notiz_entry = ttk.Entry(tab2,width=40,textvariable=notiz)
notiz_entry.grid(row=4,column=1)
btn2 = ttk.Button(tab2,text="Termin / Notiz eintragen",command=lambda: open_los(name.get(),datum.get(),uhr.get(),notiz.get()))
btn2.grid(row=5,column=1,pady=25,)