【发布时间】:2019-12-03 18:21:24
【问题描述】:
我在 PostgreSQL 中有一个表 tablename,其架构 sub 肯定存在——它已创建,已添加数据,当我在 pgAdmin 4 中运行 SELECT * FROM sub.tablename 时,它返回的结果没有问题。
当我尝试在我的 Django 应用程序中访问同一个表时,它会产生错误 psycopg2.OperationalError: FATAL: database "main.sub.tablename" does not exist。我尝试将表名设为sub.tablename 和tablename,但它仍然声称该表不存在。我是sub 的所有者,它是我用于访问该表的凭据。我已经确认主机名和端口是应该的。
我不知道如何解决此问题,因为据我所知,此错误仅在人们尚未实际创建表或拼写错误时才会出现。
ETA: 连接到 PostgreSQL 而不是仅仅使用标准 sqlite 的关键在于生产中我将有一个 PostgreSQL 表,其中包含用户名和密码(如 tablename)用于登录应用。不确定这是否会有所不同。
下面是我在settings.py 中的相关代码简介,其中出现了表/数据库信息。
settings.py
DATABASES = {
'default': {
'NAME': 'tablename',
'ENGINE': 'django.db.backends.postgresql',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '1234',
}
}
追溯
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: database "opr.opr_user_test" does not exist
【问题讨论】:
-
你的迁移是什么?他们为您处理所有这些。您是否为适当的模型创建并迁移了它们?
-
如果数据库不存在,我认为 Django 不会为我们创建数据库。
-
@Hanny 是的,当我在 Docker 容器中构建我的应用程序时,我会运行迁移,这会触发表不存在错误。
-
@JPG 是的,我知道,但是这个表存在。
-
如果它说它不存在,它很可能不存在。当你构建你的 Docker 时,你是在重建数据库和表吗?当您关闭 Docker 并重新构建它时,您的数据库是否仍然存在?也许当您重建容器并且您没有在启动脚本中重新创建它时,该表被拆除了。我见过这种情况。所以你认为它应该在那里,但实际上并非如此。
标签: django postgresql psycopg2