Python 无法使用django和VirtualEnvrapper上的postactivate挂钩迁移数据库
我是新的网站创建,并期待着创建一个网站使用django和mysql。我一直在遵循以下教程:(注意:我从一开始就遵循教程,而不仅仅是从那时开始)。当我尝试使用Python 无法使用django和VirtualEnvrapper上的postactivate挂钩迁移数据库,python,django,database,postgresql,Python,Django,Database,Postgresql,我是新的网站创建,并期待着创建一个网站使用django和mysql。我一直在遵循以下教程:(注意:我从一开始就遵循教程,而不仅仅是从那时开始)。当我尝试使用python3 manage.py migrate迁移数据库时,我的问题几乎出现在该页面的底部。这是我得到的错误: 回溯(最近一次调用上次):文件 “/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”, 第1
python3 manage.py migrate
迁移数据库时,我的问题几乎出现在该页面的底部。这是我得到的错误:
回溯(最近一次调用上次):文件
“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”,
第199行,确保连接
self.connect()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”,
第171行,连接中
self.connection=self.get_new_connection(conn_params)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/postgresql/base.py”,
第176行,在get_new_连接中
connection=Database.connect(**conn_参数)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/psycopg2/init.py”,
第164行,连接中
conn=\u connect(dsn,连接工厂=连接工厂,异步=异步)psycopg2.OperationalError:致命:角色
“'sohaib_taskbuster'”不存在
上述异常是以下异常的直接原因:
回溯(最近一次调用last):文件“manage.py”,第22行,在
从命令行(sys.argv)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/core/management/init.py”中执行,
第367行,从命令行执行命令
utility.execute()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/core/management/init.py”,
第359行,执行中
self.fetch_命令(子命令)。从_argv(self.argv)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/core/management/base.py”运行_“,
第294行,来自argv的运行中
self.execute(*args,**cmd_options)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/core/management/base.py”,
执行中的第345行
output=self.handle(*args,**options)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/core/management/commands/migrate.py”,
第83行,在手柄中
executor=MigrationExecutor(连接、self.migration\u进程\u回调)文件
“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/migrations/executor.py”,
第20行,在init
self.loader=MigrationLoader(self.connection)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/migrations/loader.py”,
第52行,在init
self.build_graph()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/migrations/loader.py”,
第203行,内置图
self.applicated_migrations=recorder.applicated_migrations()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/migrations/recorder.py”,
第65行,在应用程序迁移中
self.sure_schema()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/migrations/recorder.py”,
第52行,在模式中
if self.Migration.meta.db_表中的self.connection.introspection.table_名称(self.connection.cursor()):文件 “/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”, 第231行,在光标中 cursor=self.make_debug_cursor(self._cursor())文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”, 第204行,输入光标 self.sure_connection()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”, 第199行,确保连接 self.connect()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/utils.py”, 第94行,在退出中 重新播放(dj_exc_类型、dj_exc_值、回溯)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/utils/six.py”, 第685行,在reraise中 用“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”文件提升值, 第199行,确保连接 self.connect()文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/base/base.py”, 第171行,连接中 self.connection=self.get_new_connection(conn_params)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/django/db/backends/postgresql/base.py”, 第176行,在get_new_连接中 connection=Database.connect(**conn_参数)文件“/Users/sohaiba/.virtualenvs/env1/lib/python3.5/site packages/psycopg2/init.py”, 第164行,连接中 conn=\u connect(dsn,connection\u factory=connection\u factory,async=async)django.db.utils.OperationalError:致命:角色 “'sohaib_taskbuster'”不存在 (注意角色中双引号内的单引号,用户名应仅为sohaib_taskbuster)现在,在我的设置中,我已设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': get_env_variable('DATABASE_NAME'),
'USER': get_env_variable('DATABASE_USER'),
'PASSWORD': get_env_variable('DATABASE_PASSWORD'),
'HOST':'',
'PORT':'',
}
}
其中get_env_变量为:
def get_env_variable(var_name):
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the %s environment variable" % var_name
raise ImproperlyConfigured(error_msg)
也就是说,它应该使用postactivate钩子来提取数据库的相关信息。这是我的postactivate挂钩的外观:
export DJANGO_SETTINGS_MODULE="taskbuster.settings.development"
export DATABASE_NAME=‘taskbuster_db’
export DATABASE_USER=‘sohaib_taskbuster’
export DATABASE_PASSWORD=‘********’
使用此方法会引发上述错误,但如果我在设置中使用以下选项:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'taskbuster_db',
'USER': 'sohaib_taskbuster',
'PASSWORD': '**********',
'HOST':'',
'PORT':'',
}
}
然后迁移工作正常。我不知道为什么会这样。有没有办法解决这个问题?(如果有什么不同,我使用的是postgresql)检查
数据库用户
变量上的单引号,它们看起来与第二个数据库配置中的常规单引号大不相同。试着用正确的引号。我肯定它们是正确的引号。我认为它们看起来不同的唯一原因是因为不同的字体。邮报