如何从命令行浏览 django psql 后端?

nak*_*k3c 4 python django python-3.x psql docker

我正在使用 Django 3(在 docker 容器中)使用 postgres sql 作为后端开发一个网站;即在项目设置文件中我有:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经填充了后端数据库,并且可以使用管理员浏览数据。但是,我想通过命令行连接到数据库,以便我可以更轻松地测试查询。我尝试从命令行以正常方式连接到数据库:

sudo -u postgres psql
postgres=# \c postgres
Run Code Online (Sandbox Code Playgroud)

问题是没有找到数据:

postgres=# \dt
Did not find any relations.
Run Code Online (Sandbox Code Playgroud)

由于我是 docker 的新手,我想也尝试连接其他方式;具体来说,基于我尝试过的另一篇文章:

sudo docker run -d -p 5432 -t postgres/postgresql /bin/su postgres -c '/usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf'
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

pull access denied for psql/postgresql, repository does not exist or may require 'docker login'
Run Code Online (Sandbox Code Playgroud)

同样,我想通过命令行连接到数据库,以便我可以更轻松地测试查询。也许我走在正确的道路上,但我们将不胜感激。

Fli*_*rPA 5

使用数据库名称是一个坏主意,因为PostgreSQL 本身默认postgres有一个用于维护的数据库。postgres我建议像这样调用数据库my_project,然后创建一个服务帐户 user my_project_user,并分配一个密码:

sudo -u postgres psql
postgres=# CREATE USER my_project_user WITH PASSWORD 'blahblah';
postgres=# CREATE DATABASE my_project WITH OWNER my_project_user;
postgres=# \q
Run Code Online (Sandbox Code Playgroud)

相应地更新您的 DjangoDATABASES["default"]设置并运行迁移。运行迁移后,您可以使用以下管理命令访问 Django 数据库:

python manage.py dbshell
Run Code Online (Sandbox Code Playgroud)

您也许可以使用当前的设置发出上述命令,但使用postgres数据库名称时可能会遇到问题。祝你好运!