Проблема в использовании getpass с psycog для управления паролями - PullRequest
0 голосов
/ 12 октября 2018

Моя цель - использовать getpass, чтобы скрыть ввод моего пароля при подключении к базе данных postgresql через python3.Я использую python3 на ноутбуке jyputer.

Это хорошо работает:

connect = psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password='123456'")
cur = connect.cursor()

Но когда я пытаюсь ввести пароль с отдельной переменной, он больше не работает:

pw = getpass.getpass() 
####Python ask me to tape password and i tape the same '123456'

Для проверки:

'123456'

connect=psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw")
cur=connect.cursor()

" OperationalError: FATAL:  password authentication failed for user
FATAL:  password authentication failed for user "

получено сообщение об ошибке

Спасибо за помощь

1 Ответ

0 голосов
/ 12 октября 2018

То, что вы делаете, передает строку в функцию connect.Эта строка имеет значение "dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw".Модуль psycopg2 не может знать, что такое pw.Я подозреваю, что он будет преобразован в строку ('pw'), но я не уверен.

В любом случае, правильный подход - передать аргументы ключевого слова в функцию connect следующим образом:

connect = psycopg2.connect(dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw)
# Notice the lack of double-quotes in the arguments

Таким образом, вы будете передавать в функцию содержимое переменной pw вместо имени pw.

Можно передать содержимое pw переменная в виде строки, например, так:

connect = psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password='{}'".format(pw))

Первая форма должна быть предпочтительной.

...