Проблема в использовании getpass с psycog для управления паролями

Моя цель - использовать 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 ответ

То, что вы делаете, это передача строки 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))

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

Другие вопросы по тегам