Frage

Ich habe eine Tabelle, die wie folgt erstellt wird:

CREATE TABLE bin_test
(id INTEGER PRIMARY KEY, b BLOB)

Mit Python und cx_Oracle, wenn ich dies tun:

value = "\xff\x00\xff\x00" #The string represented in hex by ff00ff00
self.connection.execute("INSERT INTO bin_test (b) VALUES (rawtohex(?))",
                        (value,))
self.connection.execute("SELECT b FROM bin_test")

ich schließlich mit einem Hex-Wert von a000a000 am Ende, die nicht korrekt ist! Allerdings, wenn ich dies tun:

import binascii
value = "\xff\x00\xff\x00"
self.connection.execute("INSERT INTO bin_test (b) VALUES (?)",
                        (binascii.hexlify(value,)))
self.connection.execute("SELECT b FROM bin_test")

ich das richtige Ergebnis. Ich habe eine Art Umwandlungssystem hier, aber es ist ein bisschen schwierig, es hier zu beschreiben. Somit kann mir jemand in die richtige Richtung weisen, ob ich etwas falsch auf SQL-Ebene zu tun, oder ob etwas Seltsames geschieht mit meinem Conversions?

War es hilfreich?

Lösung

RAWTOHEX () ist für Oracles RAW-Datentypen konvertieren Zeichenketten verhexen. Es ist möglich, es von Ihnen verwirrt wird es einen String übergeben, auch wenn die Zeichenfolge binäre Daten enthält. In diesem Fall, da Oracle eine Reihe von Hex-Zeichen erwartet, geben Sie ihm eine Reihe von Hex-Zeichen.

Andere Tipps

RAWTOHEX in Oracle ist Bitreihenfolge unempfindlich, während auf Ihrem Computer ist es natürlich empfindlich.

Beachten Sie auch, dass ein Argument RAWTOHEX() implizit von Ihrer Bibliothek VARCHAR2 umgewandelt werden (d. H. Als SQLT_STR übertragen), die es auch macht kodieren und Sortierungs empfindlich.

ich in der Regel die richtige Art von Variablenbindungen speziell festgelegt, wenn eine Oracle irgendwie von RAW-Datentyp in eine Abfrage zu übergeben will.

zum Beispiel so etwas wie:

self.connection.setinputsizes(cx_Oracle.BINARY)
self.connection.execute(
    "INSERT INTO bin_test (b) VALUES (rawtohex(?))",
    (value,)
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top