Як налаштувати базу даних 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. Ви його встановили?
Даніель Роузман

Ні, я ні. Я спробую це зробити
Андре

1
хтось може сказати, для чого нам потрібен psycopg2 з джанго?
Амрит

Відповіді:


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
Привіт, я дотримуюся вашої інструкції, але, здається, я повинен створити пару користувача / pwd, перш ніж використовувати їх у settings.py?
Юлонг

2
але я отримую це, psycopg2.OperationalError: fe_sendauth: no password suppliedколи бігаю python manage.py syncdb. Я встановлюю ім'я випадкової таблиці та ім’я користувача.
Юлонг

1
@RedRory Спасибі, вони зараз добре;)
Аліреза Саванд

1
FYI: Станом на Django 1.9 ви можете сказати: "ENGINE": "django.db.backends.postgresql",
powlo

1
Проблема, яка у мене була з цією відповіддю, полягає в тому, що django.db.backends.postgresqlз ними не працює psycopg2. що працювало - це django.db.backends.postgresql_psycopg2зворотній кінець, і уникайте вказувати номер порту, оскільки він змінюється щоразу, коли ви запускаєте pgAdmin у Windows
Mustapha-Belkacim

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': '',
    }
}

Додатково:

Якщо ви хочете створити db за допомогою командного рядка, ви можете просто зробити:

- 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

Тепер перезавантажте апаш. Використовуйте термінал.

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? Питання про Джанго ...?
Sidhin S Thomas

1
@SidhinThomas phpPgAdmin - поширений інструмент адміністрування для PostgreSQL. Це не залежить від того, на якій мові / рамках працює база даних.
Джибу Джеймс

хіба немає нічого подібного до MySQL Workbench для Postgres?
Сидхін Томас

1
@SidhinThomas Так, існує багато інструментів графічного інтерфейсу, схожих на робочу версію MySQL. Погляньте тут. 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.
Блер


3

Якщо ви використовуєте Fedora 20, Django 1.6.5, postgresql 9.3. * І вам потрібен модуль psycopg2, зробіть це:

yum install postgresql-devel
easy_install psycopg2

Якщо ви схожі на мене, у вас можуть виникнути проблеми з пошуку добре задокументованих оборотів на хвилину libpq-dev ... Наведене вище працювало для мене саме зараз.


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

Зверніть увагу, що для встановлення psycopg2через 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.