Sqlite-DB nach Input durchsuchen und passenden Wert ausgeben

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
rookie_23
User
Beiträge: 4
Registriert: Sonntag 25. November 2018, 18:43

Hallo allerseits,

ich habe folgendes Problem bei dem mir der ein oder andere hier hoffentlich helfen könnte (ich bin noch ein blutiger Anfänger was Python und sqlite angeht :D)

Ich habe eine sqlite-DB mit einem Wörterbuch als Inhalt, die Tabelle hat drei Spalten (id, normal, leicht). Nun möchte ich eine Anfrage erstellen, in welcher nach einem Input-Wert gesucht und falls vorhanden der passende Wert ausgegeben wird und falls nicht vorhanden ein Text ausgegeben wird. Um das ganze besser verständlich zu machen ein kleines Beispiel:

id normal leicht
1 Wolkenkratzer Gebäude

Wenn als Input der Wert Wolkenkratzer eingegeben wird, soll Gebäude ausgegeben werden. Würde Wolkenkratzer in der Tabelle nicht vorkommen, dann würde der Text " Das gewünschte Wort existiert nicht." erscheinen.

Bisher habe ich folgenden Code :

Code: Alles auswählen

import sqlite3
connection = sqlite3.connect("texttechnolgie.db")





def find_me(texttechnologie, normal):
    db = sqlite3.connect(texttechnologie.db)
    cursor = db.cursor()
    word =input("Bitte ein Wort eingeben: ")
    query = "SELECT * FROM basic_german_dict WHERE word=? ORDER BY {0}".format(easy)
    cursor.execute(query, (normal,))
    for row in cursor:
       print (row)
    else print("Das gewünschte Wort existiert nicht");

Ich sagte ja blutiger Anfänger...Gruß,
rookie_23
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was ist nun Dein Problem? Was passiert? Was stimmt an dem Ergebnis nicht? Was möchtest Du statt dessen?

`connection` wird nicht benutzt und sollte auf Modulebene auch gar nicht existieren. Was ist `texttechnologie` für eine Objekt, dass es das Attribut `db` hat? Möchtest Du hier eigentlich einen String benutzen?
`easy` ist nicht definiert. Man sollte auch nicht einfach etwas in SQL-Statements hineinformatieren.
Du schreibst von einer Spalte `normal` benutzt aber `word`?
Bei `else` muß auch der Block mit einem ':' eingeleitet werden. Der `else`-Block einer for-Schleife wird immer durchlaufen, wenn das for nicht per `break` verlassen wird, er ist also hier verwirrend.
rookie_23
User
Beiträge: 4
Registriert: Sonntag 25. November 2018, 18:43

Das Problem ist, dass leider nichts passiert und nicht wie gewünscht die Datenbank nach dem Input-Wert durchsucht wird. "texttechnologie" ist meine Datenbank, die mit Hilfe dieser Funktion durchsucht werden sollte. Scheinbar ist mein Code doch ziemlich fehlerhaft. Word sollte eigentlich den Input-Wert darstellen, der in einer "normal"-Spalte vorkommen kann. Falls der Wert vorkommt und gefunden wird, sollte der dazugehörige "easy"-Wert ausgegeben werden, falls nicht, dass println() bei else.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst find_me auch aufrufen. Wo tust du das?
rookie_23
User
Beiträge: 4
Registriert: Sonntag 25. November 2018, 18:43

In der Shell, wenn ich meine die zwei Attribute (DB-Name und Spalte) eingebe, erscheint die Fehlermeldung "invalid syntax" :/
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mir ist nicht klar, was du da wie wo eingibst. Speicher dein Programm, und führ es aus. Zeig den Code, und dazugehörige Fehlermeldung ALS GANZES, nicht irgendwelche Umschreibungen.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

dass es einen Syntaxfehler gibt, habe ich Dir schon geschrieben und auch, was zu ändern ist.
rookie_23
User
Beiträge: 4
Registriert: Sonntag 25. November 2018, 18:43

Der Code:

Code: Alles auswählen

import sqlite3
connection = sqlite3.connect("texttechnolgie.db")





def find_me(db, normal):
    db = sqlite3.connect(texttechnologie.db)
    cursor = db.cursor()
    word =input("Bitte ein Wort eingeben: ")
    query = "SELECT * FROM basic_german_dict WHERE word=? ORDER BY {0}".format(easy)
    cursor.execute(query, (normal,))
    for row in cursor:
       print (row)
    else print("Das gewünschte Wort existiert nicht");

Was ich in der Shell eingebe:

Code: Alles auswählen

def_find_me(textechnologie, normal)

Fehlermeldung:

Invalid Synatax (mit Verweis auf die Attribute)
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe um die vollständige Fehlermeldung gebeten. Nicht irgendwelche Umschreibung mit Hinweisen auf Hinweise auf die hingewiesen wurde.

Und was soll denn def_find_me sein?
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du hast keine Funktion `def_find_me`, darum bekommst du einen Fehler. Deine Funktion heißt `find_me`...

Kann es vielleicht sein, dass dir akut noch ein paar Python-Grundlagen fehlen und die vielleicht nochmal das Python-Tutorial durcharbeiten möchtest?

Gruß, noisefloor
Antworten