Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datenbankfeld vom Typ VARCHAR abfragen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von wowonk, 9 Februar 2021.

  1. wowonk

    wowonk Benutzer

    Hallo,
    ich möchte eine MariaDB-Datenbank mit Python3 abfragen.
    Ich habe dort das Modul mysql.connector importiert. In einen Datenbankfeld uuid steht ein Wert vom Typ VARCHAR wie z.B.
    1cd456-11eb-34bd-3456ghj . Ich habe dieses Datum als String "Kanal" in Python vorliegen und suche jetzt den entsprechenden Datensatz.
    Meine Versuche:
    query="SELECT id FROM entities WHERE uuid = " + Kanal
    cursor.execute(query)
    liefert als Fehler: unknown column '1cd456' in 'where clause'
    Versuche mit CAST und CONVERT brachten mich auch nicht weiter. Wie mache ich das?
    Danke, Gruss wowonk
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Das ist keine valide UUID. Richtige Datenbanken haben einen eigenen Datentyp für UUID und würden dies erkennen. Falls Du mit UUID arbeiten willst: tue Dir was gutes, wirf MariaDB weg und nehme was richtiges. Bis dahin schenke ich Dir Quote-Zeichen.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Nachtrag: hier eine valide UUID aus der Wikipedia: Universally Unique Identifier – Wikipedia




    Code:
    test=*# select pg_column_size('550e8400-e29b-11d4-a716-446655440000'::uuid);
     pg_column_size
    ----------------
                 16
    (1 row)
    
    test=*# select pg_column_size('550e8400-e29b-11d4-a716-446655440000'::varchar);
     pg_column_size
    ----------------
                 40
    (1 row)
    
    
    Du erkennst den Unterschied?
     
  4. dabadepdu

    dabadepdu Datenbank-Guru

    Schau Dir mal die Funktionen bin_to_uuid() und uuid_to_bin() an.
    Binary(16) ist offenbar der 'native' UUID Typ in mySQL, nicht so straight forward, wie man es vielleicht von anderen Systemen her kennt, aber erstmal egal.
    Mit der Funktion is_uuid() kannst Du prüfen, ob Deine Parameter von der DB überhaupt als UUID akzeptiert werden.
    Und da Du es als Varchar bearbeitest, ist es wahrscheinlich sinnvoll, diese Werte in einem String konkatenierten Statement auch als Varchar Parameter zu behandeln und sie zu quoten- also in Anführungszeichen zu setzen.
     
  5. wowonk

    wowonk Benutzer

    Hallo,
    ich wußte nicht mal, das uuid etwas "offiziell definiertes" ist. Meine Beispiel-uuid war nicht korrekt, weil ich das nicht wußte. Tatsächlich haben die Feldinhalte, um die es geht, das richtige uuid-Format.
    Ich habe zwar hier (GUID/UUID Performance) die in #4 angesprochen Funktionen gefunden, weiß aber trotzdem nicht, wie ich die in meinem Rahmen anwenden muss. Die Zeile, die ich als query durchführen will lautet:
    query = "SELECT id FROM entities WHERE uuid = " + Kanal # Syntax so natürlich falsch
    wobei Kanal eine Python-Stringvariable ist, die die zu vergleichende uuid enthält. Die Rückgabe von
    cursor.execute(query)
    ist das, was mich interessiert. Ich wäre für konkrete Hilfe dankbar, da mir nicht klar ist, wie man eine Funktion mit dem query-Text verbindet. Weiterhin erscheint es mir so, als ob ich die fraglichen Funktionen in mariadb erst selbst erstellen muss.
    Bei mariadb muss ich bleiben, da ich nicht was Eigenständiges erstelle, sondern nur an etwas Vorhandenes (volkszaehler.org) mein Programm "anflansche".
    Danke, Gruss wowonk
     
  6. wowonk

    wowonk Benutzer

    Hallo
    query="SELECT id FROM entities WHERE TEXT(uuid) =?" (Kanal)
    funktioniert auch nicht.
    Gruss wowonk
     
  7. wowonk

    wowonk Benutzer

    Hallo,
    ich habe jetzt von anderer Seite Hilfe erhalten. Wie oft ist es recht einfach: mariadb erkennt in dem String Kanal das erste "-"-Zeichen als String-Delimiter. Wenn man zusätzliche maskierte String-Delimiter einsetzt klappt es. Also bezogen auf (das als uuid falsche) Beispiel #1:
    Kanal = "\'1cd456-11eb-34bd-3456ghj\'"
    Gruss, wonk
     
  8. akretschmer

    akretschmer Datenbank-Guru

    ja, siehe meine erste Antwort. Hint: bis zum Ende lesen ...
     
  9. wowonk

    wowonk Benutzer

    Hallo,
    das konnte ich mit meinen (damaligen) Kenntnissen aus Deiner Antwort nicht entnehmen.
    Gruss, wonk
     
  10. akretschmer

    akretschmer Datenbank-Guru

    das konnte ich mit meinem damaligen Wissen nicht wissen ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden