Datenbankfeld vom Typ VARCHAR abfragen

wowonk

Benutzer
Beiträge
12
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
 
Werbung:
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.
 
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?
 
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.
 
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
 
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
 
Werbung:
Zurück
Oben