我在PostgreSQL中有一个表tablename
,表sub
确实存在,它已经创建,已经添加了数据,并且当我在pgAdmin中运行SELECT * FROM sub.tablename
时4,返回结果没有问题。
当我尝试在Django应用程序中访问该表时,它会产生错误psycopg2.OperationalError: FATAL: database "main.sub.tablename" does not exist
。我尝试使表名称为sub.tablename
和tablename
,但它仍然声称该表不存在。我是sub
的所有者,它是我用来访问该表的凭据。我已经确认主机名和端口应该是正确的。
我不知道如何解决此问题,因为据我所知,此错误仅在人们尚未真正创建表或拼写错误的情况下显示。
ETA:连接到PostgreSQL而不是仅使用标准sqlite的目的是在生产中。我将拥有一个带有用户名和密码(例如tablename
)的PostgreSQL表,用于登录到应用程序。不确定在这里是否有所作为。
下面是我在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
答案 0 :(得分:0)
在settings.py中检查数据库名称,它应该是'sub'而不是'tablename'。
试试这个:
DATABASES = {
'default': {
'NAME': 'sub',
'ENGINE': 'django.db.backends.postgresql',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '1234',
}
}
答案 1 :(得分:0)
删除除 init .py文件以外的所有迁移文件,然后再次运行makemigrations,如果迁移导致任何错误使用-
python manage.py migration --fake
这将伪造迁移过程,您将很高兴。
答案 2 :(得分:0)
我摆弄着东西,发现下面的配置终于对我有用。
SELECT A.a_id
FROM A
INNER JOIN B ON A.a_id = B.a_id
WHERE B.something IN ([list])
GROUP BY a_id
HAVING COUNT(*) = [length of list]
-- or in cases where B matches may be non-unique
-- HAVING COUNT(DISTINCT B.something) = [length of list]
感谢大家的帮助!