【问题标题】:SQLAlchemy not recognising role "postgres" in my docker ImageSQLAlchemy 无法识别我的 docker Image 中的角色“postgres”
【发布时间】:2019-07-19 12:40:35
【问题描述】:

我正在尝试连接到我的 docker postgresql 映像,但 python 中的 SQLAlchemy 拒绝连接。

我使用以下命令创建了一个 docker 实例:

docker run  -d --name postgres-m2m -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=pass postgres

我可以使用 Pycharm 的数据库右侧面板成功连接到我的实例。 check the screen capture

所以我尝试将它与我的 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

然后是我的 model/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

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

标签: python postgresql docker orm sqlalchemy


【解决方案1】:
  1. 在共享屏幕截图中,数据库名称为 postgres,但在 config.py 文件中您已将其设置为 stone。这是故意的吗?
  2. 您不应将主机设置为“0.0.0.0”,因为它会侦听系统上的每个 可用接口。尝试在localhost 或您的<IP address> 等特定界面上运行数据库,并相应地更新配置文件。

【讨论】:

  • 其实我是在对代码做一些修改之前截图的(我用pycharm数据库控制台创建了另一个数据库)。我会正确更新我的问题。谢谢您的帮助!我将尝试通过更改 IP 地址来解决此问题!
  • 主机解决方案对我有用!我发现我的本地 postgres 正在使用我的端口 localhost:5432,所以我将 docker 更改为在 localhost:5433 中运行。使用: docker run -d --name postgres-m2m -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=pass postgres 并更改我的配置文件
猜你喜欢
  • 2020-09-03
  • 2021-09-21
  • 2020-10-12
  • 1970-01-01
  • 2017-02-12
  • 2020-09-08
  • 2020-11-08
  • 2022-01-08
  • 2021-10-11
相关资源
最近更新 更多