PythonAnywhere:manage.pyreturns"Access denied for user 'user'@'%' to database 'user'"
PythonAnywhere: manage.py returns "Access denied for user 'user'@'%' to database 'user'"
我在使用 PythonAnywhere 时遇到了非常令人沮丧的问题。每当我需要 运行 manage.py 时,我已经设法通过做一些棘手的工作来启动我的网站并 运行ning,但是现在我需要设置一个自动化任务,这不是更长的选择。
问题在于,在 PythonAnywhere 中,数据库必须按照约定 "user$database" 命名。由于美元符号,每当我 运行 类似 python manage.py inspectdb
时,我都会收到标题中提到的错误,因为 shell 假定附加到美元符号的任何内容都是环境变量。
目前,我将我的生产环境变量存储在一个 .env 文件中并将它们设置到 settings.py 文件中。这在 Django 内部有效,但在 shell 中的 运行ning manage.py 命令时不起作用。我试图通过在我的 manage.py 文件中添加以下代码来解决问题:
# update DATABASE_NAME to use $ instead of $ else bash commands wont work
os.putenv(
"DATABASE_NAME",
str(os.getenv("DATABASE_NAME")).replace('$', '\$')
)
但是,这并不能解决问题。
我还尝试通过创建一个名为 production_settings.py 的文件来解决此问题,该文件包含我的 DATABASES 设置并将数据库名称用单引号括在 settings.py 文件旁边,然后将以下代码插入我的 settings.py 文件设置我的数据库设置:
try:
from production_settings import DATABASES
except ImportError:
pass
同样,这没有用。我曾尝试通过 PythonAnywhere 寻求支持,但似乎没有任何支持,所以我来到这里希望这里有人知道如何解决该问题。我现在落后了几天...我该怎么办???
听起来您需要在环境文件中的值周围加上单引号。
我在使用 PythonAnywhere 时遇到了非常令人沮丧的问题。每当我需要 运行 manage.py 时,我已经设法通过做一些棘手的工作来启动我的网站并 运行ning,但是现在我需要设置一个自动化任务,这不是更长的选择。
问题在于,在 PythonAnywhere 中,数据库必须按照约定 "user$database" 命名。由于美元符号,每当我 运行 类似 python manage.py inspectdb
时,我都会收到标题中提到的错误,因为 shell 假定附加到美元符号的任何内容都是环境变量。
目前,我将我的生产环境变量存储在一个 .env 文件中并将它们设置到 settings.py 文件中。这在 Django 内部有效,但在 shell 中的 运行ning manage.py 命令时不起作用。我试图通过在我的 manage.py 文件中添加以下代码来解决问题:
# update DATABASE_NAME to use $ instead of $ else bash commands wont work
os.putenv(
"DATABASE_NAME",
str(os.getenv("DATABASE_NAME")).replace('$', '\$')
)
但是,这并不能解决问题。
我还尝试通过创建一个名为 production_settings.py 的文件来解决此问题,该文件包含我的 DATABASES 设置并将数据库名称用单引号括在 settings.py 文件旁边,然后将以下代码插入我的 settings.py 文件设置我的数据库设置:
try:
from production_settings import DATABASES
except ImportError:
pass
同样,这没有用。我曾尝试通过 PythonAnywhere 寻求支持,但似乎没有任何支持,所以我来到这里希望这里有人知道如何解决该问题。我现在落后了几天...我该怎么办???
听起来您需要在环境文件中的值周围加上单引号。