Pergunta

Eu estou usando SQLAlchemy para um projeto de Python, e eu quero ter uma seqüência de conexão arrumado para acessar meu banco de dados. Assim, por exemplo:

engine = create_engine('postgres://user:pass@host/database')

O problema é a minha senha contém uma seqüência de caracteres especiais que são interpretados como delimitadores quando tento conectar.

Eu percebo que eu poderia apenas criar um objeto e, em seguida, passar minhas credenciais como este:

drivername  = 'postgres',
username    = 'user', 
password    = 'pass', 
host        = 'host',
database    = 'database'

Mas eu prefiro usar uma seqüência de conexão, se isso é possível.

Assim, para ser claro, não é possível codificar a minha string de conexão, ou a parte senha da cadeia de ligação? - para que ele possa ser devidamente analisado

Foi útil?

Solução

As barras invertidas não são caracteres de escape válidas para URL cordas componentes. Você precisa URL-codificar a parte senha do seqüência de conexão:

from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))

Se você olhar para a implementação da classe usado em SQLAlchemy para representar URLs de conexão de banco de dados (em sqlalchemy/engine/url.py), você pode ver que eles usam o mesmo método para escapar senhas ao converter as instâncias de URL em cordas, e que o código de análise usa a função urllib.unquote_plus complementar para extrair a senha a partir de uma seqüência de conexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top