Schreibe eine Verbindungszeichenfolge, wenn Passwort Sonderzeichen enthält
-
07-07-2019 - |
Frage
Ich verwende SQLAlchemy für ein Python-Projekt, und ich möchte eine ordentliche Verbindungszeichenfolge muss meine Datenbank zugreifen. So zum Beispiel:
engine = create_engine('postgres://user:pass@host/database')
Das Problem ist, mein Passwort eine Folge von Sonderzeichen enthält, die als Trennzeichen interpretiert werden, wenn ich versuche zu verbinden.
Ich weiß, ich könnte nur ein Objekt erstellen und dann meine Anmeldeinformationen wie folgt übergeben:
drivername = 'postgres',
username = 'user',
password = 'pass',
host = 'host',
database = 'database'
Aber ich würde viel lieber eine Verbindungszeichenfolge verwenden, wenn dies möglich ist.
So klar zu sein, ist es möglich, meine Verbindungszeichenfolge oder das Passwort Teil der Verbindungszeichenfolge zu codieren - so dass es richtig analysiert werden kann
Lösung
Umgekehrte Schrägstriche sind keine gültigen Escape-Zeichen für die URL-Komponente Strings. Sie müssen das Passwort Teil der Verbindungszeichenfolge URL-Codierung:
from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))
Wenn Sie bei der Implementierung der Klasse aussehen in SQLAlchemy verwendet, um die Datenbankverbindung URLs (in sqlalchemy/engine/url.py
) darstellen, können Sie sehen, dass sie die gleiche Methode verwenden Passwörter zu entkommen, wenn die URL-Instanzen in Strings konvertiert werden, und dass der Parsing-Code verwendet die komplementäre urllib.unquote_plus
Funktion das Kennwort aus einer Verbindungszeichenfolge zu extrahieren.