执行Flask+Angular教程时遇SQLAlchemy OperationalError问题求助
问题:PostgreSQL连接报错
sqlalchemy.exc.OperationalError 在完成《使用Python Flask和Angular构建现代应用(第一部分)》教程时,遇到未在Stack Overflow提及的错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name to address: Unknown server error
问题代码如下:
from datetime import datetime from sqlalchemy import create_engine, Column, String, Integer, DateTime from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker db_url = 'localhost:5432' db_name = 'FLASK_ANGULAR' db_user = 'postgres' db_password = 'Password@22' engine = create_engine(f'postgresql://{db_user}:{db_password}@{db_url}/{db_name}') Session = sessionmaker(bind=engine) Base = declarative_base() class Entity(): id = Column(Integer, primary_key=True) created_at = Column(DateTime) updated_at = Column(DateTime) last_updated_by = Column(String) def __init__(self, created_by): self.created_at = datetime.now() self.updated_at = datetime.now() self.last_updated_by = created_by
错误排查与解决
该错误核心是无法解析数据库主机地址,导致PostgreSQL客户端无法连接服务器,以下是针对性修复步骤:
1. 修正连接字符串的主机解析问题
localhost依赖本地DNS解析,若解析异常会触发该错误,直接改用IP地址绕开解析逻辑:
db_host = '127.0.0.1' db_port = '5432' # 拆分主机和端口,格式更清晰 engine = create_engine(f'postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}')
2. 确认PostgreSQL服务状态
- Windows:打开服务管理器,找到
postgresql-x64-xx服务,确保状态为「正在运行」 - Linux/macOS:执行命令
sudo systemctl status postgresql检查服务,未启动则执行sudo systemctl start postgresql
3. 验证端口可达性
用以下命令测试5432端口是否开放:
# Windows telnet 127.0.0.1 5432 # Linux/macOS nc -zv 127.0.0.1 5432
若端口不通,检查防火墙规则是否拦截,或是否有其他程序占用5432端口。
4. 确认数据库与用户权限
- 确保
FLASK_ANGULAR数据库已创建,可通过PostgreSQL命令行执行:CREATE DATABASE FLASK_ANGULAR; - 验证
postgres用户密码正确,且拥有该数据库的访问权限。
额外处理:特殊字符密码转义
密码包含@这类特殊字符时,需用URL转义避免连接字符串解析错误:
from urllib.parse import quote_plus escaped_password = quote_plus(db_password) engine = create_engine(f'postgresql://{db_user}:{escaped_password}@{db_host}:{db_port}/{db_name}')
内容的提问来源于stack exchange,提问作者Swantewit
相关产品推荐
相关产品推荐

