Подключить Postgres к Django

12
O
На сайте с 09.04.2018
Offline
3
1929

Я попытался подключить Postgres к Django. Сделал такие настройки:

'ENGINE': 'django.db.backends.postgresql_psycopg2',

'NAME': 'django_db',
'USER' : 'postgres',
'PASSWORD' : '123456',
'HOST' : '127.0.0.1',
'PORT' : '5432',

Сделал makemigrations. Получил такой лог:

C:\django-examples\logparser>python manage.py makemigrations

System check identified some issues:

WARNINGS:
?: (urls.W005) URL namespace 'search' isn't unique. You may not be able to reverse all URLs in this namespace
parsercore.LogEntry.bytes_returned: (fields.W122) 'max_length' is ignored when used with IntegerField
HINT: Remove 'max_length' from field
Traceback (most recent call last):
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\postgresql\base.py", line 168, in get_new_connection
connection = Database.connect(**conn_params)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\psycopg2\__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError

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

Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\__init__.py", line 371, in execute_from_command_line
utility.execute()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\base.py", line 335, in execute
output = self.handle(*args, **options)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\core\management\commands\makemigrations.py", line 92, in handle
loader.check_consistent_history(connection)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\migrations\loader.py", line 275, in check_consistent_history
applied = recorder.applied_migrations()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\migrations\recorder.py", line 61, in applied_migrations
if self.has_table():
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\migrations\recorder.py", line 44, in has_table
return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 255, in cursor
return self._cursor()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 232, in _cursor
self.ensure_connection()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\django\db\backends\postgresql\base.py", line 168, in get_new_connection
connection = Database.connect(**conn_params)
File "C:\Program Files (x86)\Python36-32\lib\site-packages\psycopg2\__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError

Я может быть указал не тот пароль, но все же почему после слова Error ничего не написано? Как узнать в чем проблема,

S3
На сайте с 29.03.2012
Offline
341
#1

а вы базу данных создали с таким именем? И лучше использовать schema еще для подключения

host="*" можно еще

И проверьте ваш urls.py - в нем ошибки

O
На сайте с 09.04.2018
Offline
3
#2

да, я создал базу с таким именем. urls позже исправлю. А можно подробнее про то, что Вы написали про schema? Пожалуйста ссылкой или подробнее, чтобы знать, что гуглить.

S3
На сайте с 29.03.2012
Offline
341
#3

и кстати - сначала сделайте migrate, для инициализации бд, makemigrations уже потом - когда напишете свои модели

O
На сайте с 09.04.2018
Offline
3
#4

У меня есть модели. Я сначала на SQLite сделал.

S3
На сайте с 29.03.2012
Offline
341
#5

Инструкция для Убунты 16 и 9.4 постгрес - соответственно для новых версий меняете репо

база данных и пользователь

Правильная инструкция

echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" >> /etc/apt/sources.list.d/pgdg.list

wget -q --no-check-certificate -O - https://postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

ответ - ОК

apt-get update

apt-get install postgresql postgresql-server-dev-9.4 postgresql-contrib-9.4

В файл

nano /etc/postgresql/9.4/main/postgresql.conf

добавляем:

client_encoding = 'UTF8'

default_transaction_isolation = 'read committed'

timezone = 'UTC'

listen_addresses = '*'

max_connections = 1000

в файл

nano /etc/postgresql/9.4/main/pg_hba.conf

add "0.0.0.0/0" FOR REMOTE ACCESS

/**************

// Здесь задается схема авторизации

//dropuser - for delete

dropdb database

sudo -u postgres -s

createdb <db_name>

postgres@www:~$ createuser -P <user>

Enter password for new role: ******

Enter it again:

CREATE SCHEMA

postgres@www:~$ psql -d db_name -c "create schema authorization db_name"

sudo service postgresql start

Соответственно в подлючениях пишем:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.postgresql_psycopg2',

'NAME': 'db_name',

'USER': 'db_user',

'PASSWORD': 'db_password',

'HOST': '*',

'PORT': '5432',

'SCHEMA': 'db_schema',// то что указывали при создании

}

}

---------- Добавлено 11.04.2018 в 20:37 ----------

Неважно что вы там делали на склите) migrate создает базовую структуру - потом уже makemigrations Внимательно читайте доки

O
На сайте с 09.04.2018
Offline
3
#6

Я попробовал. Такая же ошибка.

S3
На сайте с 29.03.2012
Offline
341
#7

Урлы поправили? закомментите. В остальном вам дебагер ясно пишет - нет подключения к базе данных. без вариантов. Или пароль или юзер или база. Сервер постгрес работает? через консоль войти в базу можете можете с этими данными?

O
На сайте с 09.04.2018
Offline
3
#8

Я исправил urls. Они работают, но теперь не понимаю, почему они работают.

urlpatterns = [ path(r'admin/', admin.site.urls),

path(r'', include('parsercore.urls', namespace='search')),

]

urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'),

url(r'^search/', views.ResultView.as_view(), name='search'),

url(r'^show/', views.ResultView.as_view(), name='show'),

]

postgres через консоль запускается командой psql и сразу требует пароль. Его я не знаю. Как сбросить пароль?

S
На сайте с 23.05.2004
Offline
315
#9

Лучшее решение поставить виртуалку с линуксом и делать все в ней. Постгресс и джанга на винде - это для любителей задомазо с опытом.

А тут не знаю как насчет любителя, но опыт явно отсутствует :)

Советую сначала перейти на mysql, а постгресс трогать уже при наличии опыта базового администрирования линукса. Плюс что бы получить преимущество постгресса над мускулем, нужен достаточно мощный выделенный сервер и рукастый спец, который постгресс и настроит.

Это просто подпись.
S3
На сайте с 29.03.2012
Offline
341
#10
orbis:
Я исправил urls. Они работают, но теперь не понимаю, почему они работают.
urlpatterns = [ path(r'admin/', admin.site.urls),
path(r'', include('parsercore.urls', namespace='search')),
]

urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^search/', views.ResultView.as_view(), name='search'),
url(r'^show/', views.ResultView.as_view(), name='show'),
]

postgres через консоль запускается командой psql и сразу требует пароль. Его я не знаю. Как сбросить пароль?

У тебя урлы переписываются и работает только вторая часть, соответственно admin.url не работают. Вр втрой части измени на urlpatterns +=[...] Тут обычный tuple(кортеж) на который распространяются все питоновские правила работы со строками.

В убунте клиент постгрес по умолчанию создает пользователя postgres *c паролем postgres, попробуй

psql -u postgres -p postgres

возможно войдет без пароля - psql -u

Просто если ты не создавал пользователя, указанного в сеттингах - то естественно клиент и не может подключиться к базе данных

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий