我做这个任务是为了自学,以更好地理解客户端和服务器之间的交互。
所以我家里有一台笔记本电脑和一台台式电脑。我将使用笔记本电脑作为客户端,台式电脑作为服务器。两者都通过网线连接到网络。
在笔记本电脑上,我用 Python 和 sqlalchemy 编写了一个小程序,从数据库中获取数据并将其打印出来
connect_to_db_in_another_comp.py
from sqlalchemy import create_engine
from sqlalchemy.engine import URL
from sqlalchemy.orm import sessionmaker
from models import Base
url = URL.create(
database="Test-connect-2",
username="postgres",
host="192.168.XXX.XX",
password="123",
port=5432,
drivername="postgresql",
)
engine = create_engine(url)
connection = engine.connect() # traceback start here
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
all_records = session.query(User).all()
for i in all_records:
print(i.user_name)
全文回溯:sqlalchemy.exc.OperationalError:(psycopg2.OperationalError) 连接到服务器“192.168.XXX.XX”,端口 5432 失败:连接超时 (0x0000274C/10060) 服务器是否在该主机上运行并接受 TCP /IP 连接?
现在关于服务器。在已存在的 PostgreSQL 16 服务器中的 pgAdmin 4 桌面计算机上,我创建了 Test-connect-2 数据库。在此数据库中,我添加了一张表“用户”。服务器属性如下:
主机名/地址:192.168.XXX.XX
端口:5432
维护数据库:postgres
用户名:postgres
在文件 pg_hba.conf 中我添加了最后一行:
托管所有0.0.0.0/0 md5
我检查了防火墙并禁用了防病毒软件,但仍然收到上面指出的错误。告诉我我的错误是什么
修改postgresql.conf以允许远程连接 默认情况下,PostgreSQL 仅侦听本地主机。要启用远程连接,请将以下内容添加到
C:\NetIQ\idm\postgres\data\postgresql.conf
listen_addresses = '*'
如果服务器有多个接口,您可以指定一个。
更新 pg_hba.conf 以进行远程身份验证 要允许远程连接,请将以下内容添加到
C:\NetIQ\idm\postgres\data\pg_hba.conf
host all all 0.0.0.0/0 md5
对于 IPv6:
host all all ::0/0 md5
测试并重启 重新启动 PostgreSQL 并确保防火墙规则允许端口 5432 上的 TCP 连接。
此外,请确保如果您使用受保护的服务器,它允许端口 5432 上的 TCP 连接。您可以通过修改防火墙规则来实现这一点。
sudo ufw status
sudo ufw allow 5432/tcp
sudo ufw reload