Как настроить базу данных PostgreSQL в Django

107

Я новичок в Python и Django.

Я настраиваю проект Django с использованием серверной части ядра СУБД PostgreSQL, но я получаю ошибки при каждой операции с базой данных. Например, когда я бегу manage.py syncdb, я получаю:

C:\xampp\htdocs\djangodir>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
438, in execute_manager
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py"
, line 7, in <module>
    from django.core.management.sql import custom_sql_for_model, emit_post_sync_
signal
  File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 6, in
 <module>
    from django.db import models
  File "C:\Python27\lib\site-packages\django\db\__init__.py", line 77, in <modul
e>
    connection = connections[DEFAULT_DB_ALIAS]
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 92, in __getitem
__
    backend = load_backend(db['ENGINE'])
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 33, in load_back
end
    return import_module('.base', backend_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
    __import__(name)
  File "C:\Python27\lib\site-packages\django\db\backends\postgresql\base.py", li
ne 23, in <module>
    raise ImproperlyConfigured("Error loading psycopg module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg module: No mo
dule named psycopg

Может кто-нибудь подскажет, что происходит?

Андре
источник
11
Вроде бы ясно: модуля с именем psycopg нет. Вы его установили?
Daniel Roseman
Нет, не видел. Я постараюсь это сделать
Андре
1
может кто-нибудь сказать, зачем нам psycopg2 с django?
Амрит

Ответы:

210

Вам необходимо установить psycopg2библиотеку Python.

Монтаж


Загрузите http://initd.org/psycopg/ , затем установите его в Python PATH

После загрузки легко распакуйте архив и:

$ python setup.py install

Или, если хотите, установите его с помощью easy_install или pip .

( Я предпочитаю использовать pip вместо easy_install без причины. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Конфигурация


в настройках .py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_name',                      
        'USER': 'db_user',
        'PASSWORD': 'db_user_password',
        'HOST': '',
        'PORT': 'db_port_number',
    }
}

- Другие инструкции по установке можно найти на странице загрузки и установки страницы .

Алиреза Саванд
источник
2
Привет, я следую вашим инструкциям, но мне кажется, что я должен создать пару user / pwd, прежде чем использовать их в settings.py?
Yulong
2
но я получаю это, psycopg2.OperationalError: fe_sendauth: no password suppliedкогда бегу python manage.py syncdb. Я установил случайное имя таблицы и имя пользователя.
Yulong
1
@RedRory Спасибо, теперь они в порядке;)
Алиреза Саванд
1
К вашему сведению: Начиная с Django 1.9 вы можете сказать: 'ENGINE': 'django.db.backends.postgresql',
powlo
1
Проблема, с которой я столкнулся с этим ответом, заключается в том, что он не django.db.backends.postgresqlработает psycopg2. то, что сработало, - django.db.backends.postgresql_psycopg2это серверная часть, и он избегал указания номера порта, поскольку он меняется каждый раз, когда вы запускаете pgAdmin в Windows
Мустафа-Белкацим, 01
31

Также убедитесь, что у вас установлен пакет разработки PostgreSQL. В Ubuntu вам нужно сделать что-то вроде этого:

$ sudo apt-get install libpq-dev
Деннис Бунскук
источник
21

Пошагово, что я использую:

 - sudo apt-get install python-dev
 - sudo apt-get install postgresql-server-dev-9.1
 - sudo apt-get install python-psycopg2 - Or sudo pip install psycopg2

Вы можете установить графический инструмент для управления своими базами данных, для этого вы можете:

sudo apt-get install postgresql pgadmin3 

После этого вы должны изменить пароль пользователя Postgre, затем выполните:

 - sudo su
 - su postgres -c psql postgres
 - ALTER USER postgres WITH PASSWORD 'YourPassWordHere';
 - \q

В вашем файле settings.py вы делаете:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '',
        'PORT': '',
    }
}

Дополнительно:

Если вы хотите создать базу данных с помощью командной строки, вы можете просто сделать:

- sudo su
- su postgres -c psql postgres
- CREATE DATABASE dbname;
- CREATE USER djangouser WITH ENCRYPTED PASSWORD 'myPasswordHere';
- GRANT ALL PRIVILEGES ON DATABASE dbname TO djangouser;

В вашем файле settings.py вы делаете:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}
Грегори
источник
9

Это может показаться немного длинным, но у меня это сработало без каких-либо ошибок.

Сначала установите phppgadmin из Центра программного обеспечения Ubuntu.

Затем выполните эти шаги в терминале.

sudo apt-get install libpq-dev python-dev
pip install psycopg2
sudo apt-get install postgresql postgresql-contrib phppgadmin

Запустите сервер apache

sudo service apache2 start

Теперь запустите это тоже в терминале, чтобы отредактировать файл apache.

sudo gedit /etc/apache2/apache2.conf

Добавьте в открытый файл следующую строку:

Include /etc/apache2/conf.d/phppgadmin

Теперь перезагрузите apache. Используйте терминал.

sudo /etc/init.d/apache2 reload

Теперь вам нужно будет создать новую базу данных. Войдите как пользователь postgres. Продолжайте в терминале.

sudo su - postgres

Если у вас возникли проблемы с паролем postgres, вы можете изменить его, используя ответ здесь https://stackoverflow.com/a/12721020/1990793, и продолжить действия.

Теперь создайте базу данных

createdb <db_name>

Теперь создайте нового пользователя для входа в phppgadmin позже, указав новый пароль.

createuser -P <new_user>

Теперь ваш postgressql настроен, и вы можете перейти к:

http://localhost/phppgadmin/

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

Джибу Джеймс
источник
зачем возиться с php? Вопрос про Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin - распространенный инструмент администрирования PostgreSQL. Это не зависит от того, на каком языке / фреймворке работает база данных.
Джибу Джеймс
нет ничего подобного MySQL workbench для Postgres?
Sidhin S Thomas
1
@SidhinThomas: Да, есть много инструментов с графическим интерфейсом, подобных MySQL workbench. Взгляните сюда. wiki.postgresql.org/wiki/…
Джибу Джеймс
6

Вы можете установить "psycopg" с помощью следующей команды:

# sudo easy_install psycopg2

В качестве альтернативы вы можете использовать pip:

# pip install psycopg2

easy_install и pip включены в ActivePython или устанавливаются вручную с соответствующих сайтов проекта .

Или просто получите предварительно созданный установщик Windows .

Сандро Мунда
источник
2
Или sudo apt-get install python-psycopg2если вы работаете в системе Debian и хотите использовать диспетчер пакетов, а не pip / easy_install.
Блэр
4

Непосредственная проблема, похоже, заключается в том, что вам не хватает модуля psycopg .

aptwebapps
источник
3

Если вы используете Fedora 20, Django 1.6.5, postgresql 9.3. * И вам нужен модуль psycopg2, сделайте следующее:

yum install postgresql-devel
easy_install psycopg2

Если вы похожи на меня, у вас могут возникнуть проблемы с поиском хорошо документированного libpq-dev rpm ... Вышеупомянутое сработало для меня только сейчас.

Майк Кеннеди
источник
3

У меня была такая же проблема на Mac .

Решением было использовать только PIP, чтобы все установить и кое-что коснуться.

Сначала установите PIP с: https://pip.pypa.io/en/latest/

Затем вы хотите убедиться, что путь к pg_config находится в вашем PATH (echo $ PATH), если нет, вы можете отредактировать свой bash_profile:

vi /Users/<user>/.bash_profile

и добавьте эту строку:

export PATH=$PATH:/path/to/pg_config/bin

Если вы не знаете, где находится pg_config, вы можете использовать инструмент «locate», но убедитесь, что ваш locate.db обновлен (я использовал старый файл locate.db и пути, которых не существует).

sudo /usr/libexec/locate.updatedb
locate pg_config

Затем установите Django (при необходимости) и psycopg2.

sudo pip install Django
sudo pip install psycopg2

А затем в settings.py (localhost: defaultport)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '',
        'PORT': '',
    }
}

Приветствую!

Хуан Пабло Арриагада Кансино
источник
2
$ sudo apt-get install libpq-dev

Год, это решит мою проблему. После этого выполните: pip install psycopg2

Грегори
источник
0

Обратите внимание, что для установки psycopg2via pip или setup.py требуется Visual Studio 2008 (точнее исполняемый файл vcvarsall.bat ). Если у вас нет прав администратора для ее установки или установки соответствующей переменной PATH в Windows, вы можете скачать уже скомпилированную библиотеку отсюда .

Сергей Иванов
источник
Как насчет этого? Компилятор Microsoft Visual C ++ для Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP