Verbindung zu einer DB herstellen und etwas ausgeben

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
m_mattia
User
Beiträge: 2
Registriert: Mittwoch 28. Oktober 2020, 16:25

Hallo Zusammen,
Mein Ziel ist eine Verbindung zu meiner MySQL-DB herzustellen. Ich habe als Vorlage folgendes Verwendet. https://www.w3schools.com/python/python ... select.asp Die DB ist zurzeit eine lokale die von XAMPP gestartet ist und funktioniert soweit auch. Der Port der DB ist unverändert und somit 3306, der Username und das Passwort ebenfalls. Danke für die Antworten schon im Voraus.

Mein Code:

Code: Alles auswählen

import importfile as ImF
import userData as Ud


class DB:

    mydb = ImF.mysql.connector.connect(
        host="127.0.0.1",
        user="root",
        password="",
        database="ch283952_tst_citizen",
        )
    print(mydb)

    pycursor = mydb.cursor()

    mydb.mycursor.execute("SELECT firstname FROM citizen LIMIT 1")

    myresult = mydb.mycursor.fetchone()

    print(myresult)


if __name__ == "__main__":
    DB()
Fehlermeldung:
AttributeError: 'MySQLConnection' object has no attribute 'mycursor'
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@m_mattia: Du benutzt Klassen falsch. Schau Dir nochmal in Deinem Tutorial an, wie es richtig geht.
Bisher brauchst Du gar keine Klasse, sondern das ist eigentlich eine Funktion.
Benutze keine kryptischen Abkürzungen. Module werden wie Funktionen und Variablennamen komplett klein geschrieben.
Die Modulenamen lassen auch befürchten, dass die Module nicht sinnvoll aufgeteilt sind.

Code: Alles auswählen

import mysql

def main():
    mydb = mysql.connector.connect(
        host="127.0.0.1",
        user="root",
        password="",
        database="ch283952_tst_citizen",
        )
    print(mydb)
    pycursor = mydb.cursor()
    mydb.mycursor.execute("SELECT firstname FROM citizen LIMIT 1")
    myresult = mydb.mycursor.fetchone()
    print(myresult)

if __name__ == "__main__":
    main()
Jetzt bleibt die Frage, warum Du denkst, dass mydb ein Attribut mycursor haben sollte?
Die ganzen my-Präfixe sind übrigens unsinnig, solange es nicht auch ein yourresult gibt.
m_mattia
User
Beiträge: 2
Registriert: Mittwoch 28. Oktober 2020, 16:25

@Sirius3: Das ich die Funktion in der Klasse vergessen habe, weiss ich nicht wie mir das passiert ist (normalerweise habe ich es immer gemacht). Zu den kryptischen Abkürzungen, ich habe ein Import-File erstellt bei dem ich alle Import tätige, da ich sonst bei jedem File viele Importe tätigen muss und auch keine übersehe (vielleicht überdenke ich diese Lösung mit dem Import-File nochmal). Ich habe aber den Code angepasst und er funktioniert jetzt. Danke
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@m_mattia: Was auch immer Du als „Import-File“ bezeichnest, Du hast sehr wahrscheinlich nicht verstanden wie Importe in Python funktionieren und/oder missbrauchst das massiv. Was in einem Modul benötigt wird, das importiert man auch *dort* und nicht irgendwo anders wo dann am Ende sehr wahrscheinlich mehr importiert wird als benötigt wird. Das dient auch als Dokumentation wovon ein Modul abhängt und das man leicht sehen kann, was von wo kommt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Ist da nicht auch irgendwas mit den cursorn durcheinander?

Hätte nämlich:

Code: Alles auswählen

import mysql

def main():
    mydb = mysql.connector.connect(
        host="127.0.0.1",
        user="root",
        password="",
        database="ch283952_tst_citizen",
        )
    print(mydb)
    pycursor = mydb.cursor()
    pycursor.execute("SELECT firstname FROM citizen LIMIT 1")
    myresult = pycursor.fetchone()
    print(myresult)

if __name__ == "__main__":
    main()
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
webbygirl21
User
Beiträge: 7
Registriert: Donnerstag 12. November 2020, 12:21

Hallo Leute! Ich bräuchte auch Hilfe zu diesem Thema und wenn ich soetwas lese wie "Du hast sehr wahrscheinlich nicht verstanden wie Importe in Python funktionieren", dann passt das auch zu mir denke ich :) Jetzt aber die wichtige Frage: wo kann ich das ändern? Hab ihr Tipps für gute Tutorials, Bücher etc. bei denen ich genau sowas sauber lernen kann?
Home is where my computer is. :mrgreen:
Graffito
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

zum Lernen ist immer das offizielle Python-Tutorial unter docs.python.org gut.

Gruß, noisefloor
Antworten