и у меня есть postgress в Windows. Теперь я пытаюсь подключиться к Postgresssql через код Python, как показано ниже. но соединение не установлено с ошибкой Соединение отклонено
код:
Код: Выделить всё
try:
conn = psycopg2.connect(host='localhost',database='fastapi',password='xxxx',cursor_factory=RealDictCursor)
cursor = conn.cursor()
print("Database connection was successfull")
except Exception as error:
print("Connetion to database has failed")
print("Error", error)
Код: Выделить всё
Connetion to database has failed
Error connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
Как подключиться к Windows Postgres База данных из WSL
Действия, выполненные по ссылке выше
Добавить правило входящего порта брандмауэра Windows для IP-адреса WSL2 Адреса:
- Откройте брандмауэр Защитника Windows в режиме повышенной безопасности.
- Нажмите «Новое правило»...
Выберите «Порт» в качестве типа правила. - Выберите «TCP», а в поле «Определенные локальные порты» введите 5432.
- Выберите «Разрешить соединение». Подключение из WSL2 не будет безопасным, поэтому не выбирайте безопасный вариант.
- Выберите хотя бы «Общедоступный». Также можно выбрать Домен и Частный. Я мог подключиться только в том случае, если был выбран параметр «Общедоступный».
- Назовите правило, например. Postgres — подключитесь из WSL2 и создайте его.
- Щелкните правой кнопкой мыши только что созданное правило и выберите «Свойства», затем перейдите на вкладку «Область».
- В разделе «Удаленный IP-адрес» выберите Затем эти IP-адреса нажмите «Добавить...» и введите диапазон от 172.0.0.1 до 172.254.254.254
10.Повторите шаг 9 для диапазона IP-адресов от 192.0.0.1 до 192.254.254.254
11.Нажмите «Применить», затем «ОК»12.Убедитесь, что правило включено.
Код: Выделить всё
C:\Program Files\PostgresSQL\$VERSION\data
Код: Выделить всё
listen_addresses = '*'
Обновите pg_hba.conf, чтобы разрешить соединения из диапазона WSL2, например. для Postgresl 15:
Код: Выделить всё
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
host all all 172.0.0.0/8 scram-sha-256
host all all 192.0.0.0/8 scram-sha-256
Перезапустите Postgres, чтобы изменения вступили в силу. Это можно сделать либо из приложения «Службы Windows», либо из cmd с правами администратора, например. для Postgresql 15:
Код: Выделить всё
net stop postgresql-x64-12
net start postgresql-x64-12
В WSL добавьте следующее в свой ~/.bashrc или подобное:
Код: Выделить всё
# Add DNS entry for Windows host
if ! $(cat /etc/hosts | grep -q 'winhost'); then
echo 'Adding DNS entry for Windows host in /etc/hosts'
echo '\n# Windows host - added via ~/.bashhrc' | sudo tee -a /etc/hosts
echo -e "$(grep nameserver /etc/resolv.conf | awk '{print $2, " winhost"}')" | sudo tee -a /etc/hosts
fi
Я установил и импортировал psycopg2 в код.
Код: Выделить всё
pip install psycopg2-binary

Спасибо
К
Подробнее здесь: https://stackoverflow.com/questions/778 ... on-refused