python - SQLAlchemy 无法识别我的 docker Image 中的角色“postgres”
问题描述
我正在尝试连接到我的 docker postgresql 映像,但 python 中的 SQLAlchemy 拒绝连接。
我使用以下命令创建了一个 docker 实例:
docker run -d --name postgres-m2m -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=pass postgres
我可以使用 Pycharm 的数据库右侧面板成功连接到我的实例。 检查屏幕截图
所以我试图将它与我的 python 应用程序连接起来。
首先,我确实创建了settings/config.py文件:
class dbCredentials:
DB_USER = 'postgres'
DB_PASS = 'pass'
DB_NAME = 'postgres'
DB_HOST = '0.0.0.0'
DB_PORT = '5432'
DB_SCHEMA = 'telecom'
def __int__(self):
pass
然后我的模型/base.py
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from settings.config import dbCredentials
credentials = dbCredentials()
DB_USER = credentials.DB_USER
DB_PASS = credentials.DB_PASS
DB_HOST = credentials.DB_HOST
DB_PORT = credentials.DB_PORT
DB_NAME = credentials.DB_NAME
DB_SCHEMA = credentials.DB_SCHEMA
engine = create_engine(f'postgresql://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}')
Session = sessionmaker(bind=engine)
Base = declarative_base(metadata=MetaData(schema=DB_SCHEMA))
之后我确实创建了表model/tables/status.py
from sqlalchemy import Column, SmallInteger, String
from src.models.base import Base
class Status(Base):
__tablename__ = 'status'
id = Column('id', SmallInteger, primary_key=True, autoincrement=True, nullable=False)
STATUS = Column('STATUS', String, nullable=False)
def __init__(self, STATUS):
self.STATUS = STATUS
最后是我的main.py文件
from src.models.base import Base, Session, engine
from src.models.tables.status import Status
Base.metadata.create_all(engine, checkfirst=True)
session = Session()
此时我收到以下错误:
[...] conn = _connect(dsn, connection_factory=connection_factory, **kwasync) sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) 致命:角色“postgres”不存在(此错误的背景:http:// sqlalche.me/e/e3q8 )
谁能帮我解决这个问题?
谢谢!
解决方案
- 在共享屏幕截图中,数据库名称是
postgres
,但在 config.py 文件中您已将其设置为stone
. 这是故意的吗? - 您不应将主机设置为“0.0.0.0”,因为它会侦听系统上的每个可用接口。尝试在特定界面上运行数据库,例如
localhost
或您的<IP address>
,并相应地更新配置文件。
推荐阅读
- php - Fatal error: require(): Failed opening required 'vendor/autoload.php' in Laravel project/Serpwow API
- python - 使用 selenium 抓取启用 Google 验证码“我不是机器人”的网站
- python - 如何在 VsCode 中定义 %time
- apache-spark - 如何避免过多的数据框查询
- php - php array target value by name instead of number
- typescript - Typescript Generic Constraint where the property of one type depends on the other
- javascript - JavaScript array delete an element from an index
- html - 如何在页面调整大小期间使图像不拉伸
- javascript - xmlHttpRequest stuck on readystate 1
- kubernetes - 在 K8S 中,每个 kube-proxy(在每个节点上运行)是否都有相同的实现?