Welche Art verwendet wird, zum speichern von byte-Ketten in SQLAlchemy?
Ich versuche zu speichern byte-Zeichenfolgen in einer PostgreSQL-Datenbank mit SQLAlchemy.
Mein Modell sieht wie folgt aus:
class UserAccount(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
password_hash = db.Column(db.String)
password_salt = db.Column(db.String)
Möchte ich password_hash
und password_salt
beide byte-strings (d.h. str, da bin ich mit Python 2.7), aber auch wenn ich den pass bytes hinein, SQLAlchemy zu drehen scheint in unicode. Ich habe auch versucht, mit Hilfe convert_unicode=False
im Modell, aber ich bekomme das gleiche Ergebnis.
Was benutze ich zum speichern von bytes in einem SQLAlchemy Modell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
LargeBinary
geben, die diebytea
Typ auf PostgreSQL. Sie können auch dieBYTEA
geben direkt auf, wenn du gehst zu verwenden PostgreSQL.Gibt es andere SQL-standard-Typen, wie
BINARY
, aber es ist in der Regel einfacher zu verwendenLargeBinary
seit SQLAlchemy wird die bevorzugte Art für jede Datenbank.Kürzere byte-strings können Sie auch verwenden,TypeDcorator, wickeln Sie das
String
Spalte Klasse. Verwenden Sie dann Ihren benutzerdefinierten Typ KlasseHexByteString
alsColumn
Typ:Können Sie dann zuweisen
bytes
Instanzen derdata
AttributMyModel
Instanzen und Sie werden in Zeichenfolgen konvertiert werden mit hexdecimal Ziffern und zurück, wenn die übergebene/aus der Datenbank. Dies verdoppelt den Speicher der Größe, natürlich, aber macht es einfacher, um zu sehen, was in der Spalte gespeichert, wenn man die Datenbank direkt.Können Sie ersetzen
bytes.hex()
/bytes.fromhex()
(der braucht Python 3.5+) mit jedem anderen encoding-Schema, die sicher speichert bytes in Ascii-strings, z.B. Base64 (base64.b64_encode(value).decode()
/base64.b64_decode(value)
).