gpt4 book ai didi

python - 创建用于 Django 的 PostgreSQL 数据库

转载 作者:行者123 更新时间:2023-11-29 14:20:13 25 4
gpt4 key购买 nike

我目前正在努力通过 this关于如何使用 Django 制作基本博客的教程,但我想使用 PostgreSQL 数据库而不是 sqlite 数据库。 Django 不会为非 sqlite 自动创建数据库,我在创建我的数据库时遇到了问题。我以为我做得很好,但是每当我尝试同步我的数据库时,我都会看到一堆文件路径,然后是错误

"django.db.utils.OperationalError: FATAL:  role [username] does not exist"

我尝试用谷歌搜索问题并尝试找到一些解决方案,但它们似乎都不起作用。

提前感谢您提供的任何指导。

最佳答案

在过去从初学者的角度遇到过这个问题,我会更深入——首先,关于如何阅读 Django 错误的注释:

django.db.utils.OperationalError

意味着 django 的数据库实用程序(将 django 连接到不同类型的数据库,如 MySQL、Postgres 和 SQLite)中存在错误,因此出现了 db.utils 部分。 OperationalErrors 是当您尝试运行某些东西时从数据库本身返回的东西,这意味着您可以隔离 Django 并专注于数据库交互本身。如果 Django 不存在并且您通过 psql(postgres 的命令行实用程序)运行相同的命令,您仍然会看到:

FATAL: role [username] does not exist

此外,由于全部大写,您通常可以从数据库中判断出这是一个错误。关系数据库喜欢大写锁定。

就解决它而言,错误是非常 self 描述的。您需要查看的是您的 settings.py 文件(正如 kmmnbvnr 指出的那样)。在您的数据库配置中,您应该看到用户名和密码。 Postgres 提示您正在尝试使用不存在的用户连接到已配置的数据库,因此您需要创建它。以下是使用 PSQL 而不是使用 kmmbvnr 的 sudo 命令的命令:

使用命令行实用程序连接到数据库:

$ psql -d postgres

如果您创建的数据库不是默认的 postgres,请使用它代替数据库名称,

$ psql -d my_database_name

编辑:在某些操作系统上,您可能需要添加 -U <database user>如果它填写您的操作系统用户名而不是默认的“postgres”用户名。

$ psql -d postgres -U postgres (postgres 是默认用户)。

CREATE ROLE testrole WITH LOGIN ENCRYPTED PASSWORD 'password';

ALTER ROLE testrole WITH CREATEDB;

grant all privileges on database postgres to testrole;

将测试角色和密码更改为您喜欢的任何内容,只要它们与 settings.py 中的用户名/密码匹配即可。请注意密码周围的 ' ',但不要注意用户名周围的 ' '。那些很重要。另请注意,出于安全原因,Postgres 不赞成使用内置的“postgres”用户执行非管理任务,因此最好创建另一个用户与 Django 一起使用。此外,关于授予权限的最后几行有点宽容,但对于本地测试配置,这将是您最简单的选择。请参阅 Postgres 文档以了解生产环境的权限/适当的安全性。

最后,您可以独立于 django 进行测试,方法是查阅 PSQL 的手册页(linux/mac 上的 man psql),了解如何使用命令行以特定用户登录。我相信命令是:

$ psql -d postgres -U testrole -W

-d 指定数据库(即 mydatabase 或 postgres),-U 是要连接的用户,-W 表示提示输入密码。

关于python - 创建用于 Django 的 PostgreSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com