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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top