Erste Schritte MariaDB mit python3 Verständnisproblem

mschrak

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

ich versuche mich gerade daran, aus einem Python3 Script auf meine MariaDB zuzugreifen.
Erster Schritt (Lesen von Daten nach Tutorial https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/) macht mir leider schon Probleme, da ich Programmier-Anfänger bin.

import mysql.connector as mariadb
mariadb_connection = mariadb.connect(user='python_user', password='some_pass', database='employees')
cursor = mariadb_connection.cursor()
cursor.execute("SELECT first_name,last_name FROM employees WHERE first_name=%s", (some_name,))
for first_name, last_name in cursor:
print("First name: {}, Last name: {}").format(first_name,last_name)

Probleme habe ich mit dem Verständnis von Zeile 4 (der eigentlichen execute-Syntax und SELECT-Abfrage):
1. first_name und last_name sehen für mich aus wie DB-Spalten, das ist soweit OK. 'employees' ist der Name der DB. Aber an welcher Stelle sage ich denn, aus welcher DB-"Tabelle" die Daten abgefragt werden sollen?
2. Was ist (some_name,) in dem Beispiel? Die Ausgabevariable, die ich einfach irgendwie nennen kann? Bei meinem Versuch kommt da die Fehlermeldung "name some_name is not defined"...

Sorry, dass ich so einfache Sachen frage, ich stehe gerade einfach uaf dem Schlauch.

Über eine Antwort würde ich mich sehr freuen.

Martin
 
In deinem Code heißt die Database und die Tabelle employees (siehe Connect).

Der Tabellenname steht im SELECT statement.
 
OK, habe das geändert, bekomme aber immer noch die Fehlermeldung "name some_name is not defined" ...
 
Du musst das Tutorial auch lesen, nicht nur den Code kopieren und ausführen ;)

This code uses a variable string (%s) which is assigned from the some_name variable that follows in parentheses. You should have assigned the variable already to a name. Use exactly this syntax with the same number of arguments to ensure that your code works.
 
  • Gefällt mir
Reaktionen: teufelernie
Es waer schon toll wenn du some_name Variable dann auch definierst und dort einen Namen festlegst ... oder was denkst du macht die Anfrage? Die sucht ja wohl nach den Eintraegen, wo der Vorname dem Suchnamen entspricht, oder nicht? Es bietet sich an die SQL Queries zu verstehen, auch in Tutorials - falls du schon SQL Kenntnisse besitzt sollte das leicht gehen.
 
  • Gefällt mir
Reaktionen: teufelernie
Some_Name scheint mir ein Beispiel zu sein für den String, den du als Beispiel abfragen willst.

Ansonsten musst du diese Var anlegen, wie hier beschrieben:

This code uses a variable string (%s) which is assigned from the some_name variable that follows in parentheses. You should have assigned the variable already to a name.

Also some_name='Meier' oder so.

Dann noch ein Tipp: In 9/10 Tutorials werden immer fleissig DB Verbindungen aufgemacht, aber nie zu.
Wenn ein Entwickler dann sagt: ja die DB macht die irgendwann ja selbst zu, ramme ich den in den Boden. Weil:
Je nachdem wie oft du eine DB Abfrage raushaust hast du irgendwann die max Verbindungszahl der DB erreicht.
Sofern du nicht im Ram-Lotto gewonnen hast und den Wert für max-connections luxoriös erhöhen kannst (was das Problem nicht löst, sondern nur verzögert), bitte immer die DB Verbindung am Ende deiner Abfrage schließen!
 
  • Gefällt mir
Reaktionen: Raijin und Marflowah
Wahrscheinlich habe ich da noch ein Verständnisproblem:
Was genau soll denn das Tutorial-Beispiel machen?

Ganz praktisch sieht es bei mir so aus:
Ich habe eine DB namens "Personendaten"
Darin befindet sich eine Tabelle namens "tbl_nutzer"
Diese hat die Spalten nutzer_name und nutzer_passwort
Mein Ziel ist es, in Python nun auf die vorhandene Variable eingabe="Peter" das entsprechende Passwort in eine neue Variable zu schreiben, die ich dann weiterverwende, zB zur Prüfung oder zur Ausgabe etc.

Kann mir da jemand auf die Sprünge helfen?

Wie mache ich die DB denn wieder zu?

Und ja, ich gebe es zu, meine SQL-Kenntnisse sind quasi NULL. Ich hatte gehofft, im Rahmen meiner derzeitigen Python-Lernerei die darin sinnvollen und für mein Projekt benötigten SQL-Fertigkeiten ansatzweise mit zu erwerben... (Beschränkt sich derzeit auf PHPMyAdmin).
Leider sind die Tutorials, die MariaDB und Python3 zusammen behandeln und auf deutsch sind sehr sehr rar gesät...
 
Zuletzt bearbeitet:
SQL ist ein komplett eigenes Thema mach doch erstmal ein SQL Tutorial. Wenn Du das einigermaßen Verstanden hast, sollte es trivial sein, Dein Beispiel daraufhin umzubauen...
 
mschrak schrieb:
Ganz praktisch sieht es bei mir so aus:
Ich habe eine DB namens "Personendaten"
Darin befindet sich eine Tabelle namens "tbl_nutzer"
Diese hat die Spalten nutzer_name und nutzer_passwort
Mein Ziel ist es, in Python nun auf die vorhandene Variable eingabe="Peter" das entsprechende Passwort in eine neue Variable zu schreiben, die ich dann weiterverwende, zB zur Prüfung oder zur Ausgabe etc.
und woran scheitert es bei dir jetzt? Ich verstehe das Problem nicht ganz. Leg dir eine DB und die Tabelle darin an (geht auch ohne Python Code vorab). Im Code, verbinde dich mit der DB und dann fuehre die Anfragen aus. Was geht nun nicht? An welcher Stelle haengst du denn nun?

mschrak schrieb:
Wie mache ich die DB denn wieder zu?
also nochmal, du musst das Tutorial auch vollstaendig lesen und durcharbeiten, wenn du was mitnehmen willst>
Once you finish working with the database make sure that you close this connection to avoid keeping unused connections open and thus wasting resources. You can close the connection with the close() method:
mariadb_connection.close()
 
mschrak schrieb:
Ganz praktisch sieht es bei mir so aus:
Ich habe eine DB namens "Personendaten"
Darin befindet sich eine Tabelle namens "tbl_nutzer"
Diese hat die Spalten nutzer_name und nutzer_passwort
Mein Ziel ist es, in Python nun auf die vorhandene Variable eingabe="Peter" das entsprechende Passwort in eine neue Variable zu schreiben, die ich dann weiterverwende, zB zur Prüfung oder zur Ausgabe etc.
Ich gehe mal davon aus, dass du das Tutorial dann auch deiner Tabelle angepasst hast? Du kannst schließlich nicht erwarten, dass du aus der Tabelle "employees" irgendwelche Daten abrufen kannst, wenn sie gar nicht in der Datenbank drin ist, weil du dort die Tabelle "tbl_nutzer" angelegt hast.

Passe also das Select an deine Datenbanktabelle an, um Daten abzurufen. Oder baue die Tabelle aus dem Tutorial nach (gibt's ggfs sogar als Download im Tutorial?).


Davon, dass man Passwörter nicht in Klartext in einer DB speichert, sondern stattdessen nur Hashwerte aus dem PW generiert und diese abspeichert, fange ich lieber nicht an. Das sprengt den Rahmen, wenn's schon am select scheitert ;)
 
  • Gefällt mir
Reaktionen: teufelernie
Zurück
Oben