簡體   English   中英

python migration(django)不適用於PostgreSQL

[英]python migrate (django) not working with postgresql

安裝postgresql時,我安裝了psycopg2並遵循了本教程中的所有步驟以及django文檔: http : //killtheyak.com/use-postgresql-with-django-flask/

但是我在運行python manage.py migration時遇到了這個異常

Traceback (most recent call last)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
self.connect()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 171, in connect
self.connection = self.get_new_connection(conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection
connection = Database.connect(**conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  role "user" does not exist


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
self.connect()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 171, in connect
self.connection = self.get_new_connection(conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection
connection = Database.connect(**conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  role "user" does not exist


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 89, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/migrations/executor.py", line 20, in __init__
self.loader = MigrationLoader(self.connection)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/migrations/loader.py", line 49, in __init__
self.build_graph()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/migrations/loader.py", line 176, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
self.ensure_schema()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/migrations/recorder.py", line 52, in ensure_schema
if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 231, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 204, in _cursor
self.ensure_connection()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
self.connect()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
self.connect()
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/base/base.py", line 171, in connect
self.connection = self.get_new_connection(conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 175, in get_new_connection
connection = Database.connect(**conn_params)
File "/Users/mehulgoel/Documents/workspace/python/django18/lib/python3.4/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: FATAL:  role "user" does not exist

任何幫助,將不勝感激。

我想您在這里創建的用戶:

sudo -u postgres createuser -s $USER

與您在此處使用的用戶不同:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'yournewdb',
        'USER': 'yourusername',
        'PASSWORD': 'yourpassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

如果您使用的是Linux,請為PostgreSQL安裝依賴項以與Python配合使用:

sudo apt install libpq-dev python-dev

然后使用以下命令安裝PostgreSQL:

sudo apt install postgresql postgresql-contrib

如果您使用的是Mac或Windows,請下載PostgreSQL並進行安裝。

另外,您還必須將psycopg2用作PostgreSQL的python適配器。

pip install psycopg2-binary

一旦完成,請使用以下命令:

sudo -u postgres psql
postgres=# create database mydb;
postgres=# create user myuser with encrypted password 'mypass';
postgres=# grant all privileges on database mydb to myuser;

完成所有這些操作后,修改您的settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'mypass',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

接着,

python manage.py migrate

它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM