Jak skonfigurować bazę danych PostgreSQL w Django

107

Jestem nowy w Pythonie i Django.

Konfiguruję projekt Django przy użyciu zaplecza silnika bazy danych PostgreSQL, ale otrzymuję błędy przy każdej operacji na bazie danych. Na przykład, kiedy biegam manage.py syncdb, otrzymuję:

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

Czy ktoś może mi podpowiedzieć, co się dzieje?

André
źródło
11
Wydaje się całkiem jasne: nie ma modułu o nazwie psycopg. Czy to zainstalowałeś?
Daniel Roseman,
Nie, nie mam. Spróbuję to zrobić
André
1
czy ktoś może powiedzieć, dlaczego potrzebujemy psycopg2 z django?
Amrit

Odpowiedzi:

210

Musisz zainstalować psycopg2bibliotekę Python.

Instalacja


Pobierz http://initd.org/psycopg/ , a następnie zainstaluj go w Python PATH

Po pobraniu łatwo rozpakuj archiwum i:

$ python setup.py install

Jeśli chcesz, zainstaluj go za pomocą easy_install lub pip .

( Wolę używać pip zamiast easy_install bez powodu ).

  • $ easy_install psycopg2
  • $ pip install psycopg2

Konfiguracja


w ustawieniach .py

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

- Inne instrukcje dotyczące instalacji można znaleźć na stronie pobierania i stronie instalacji .

Alireza Savand
źródło
2
Cześć, postępuję zgodnie z twoimi instrukcjami, ale wygląda na to, że powinienem utworzyć parę użytkownik / pwd, zanim użyję ich w settings.py?
Yulong
2
ale dostaję to, psycopg2.OperationalError: fe_sendauth: no password suppliedkiedy biegnę python manage.py syncdb. Ustawiłem losową nazwę tabeli i nazwę użytkownika.
Yulong
1
@RedRory Dzięki, teraz są w porządku;)
Alireza Savand
1
Do Twojej wiadomości: Od Django 1.9 możesz powiedzieć: 'ENGINE': 'django.db.backends.postgresql',
powlo
1
Problem, który miałem z tą odpowiedzią, polega na tym, że django.db.backends.postgresqlnie działa psycopg2. to, co działało, to django.db.backends.postgresql_psycopg2zaplecze i uniknięto określania numeru portu, ponieważ zmienia się on za każdym razem, gdy uruchamiasz pgAdmin w
systemie
31

Upewnij się również, że masz zainstalowany pakiet deweloperski PostgreSQL. W Ubuntu musisz zrobić coś takiego:

$ sudo apt-get install libpq-dev
Dennis Bunskoek
źródło
21

Krok po kroku, którego używam:

 - 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

Możesz zainstalować narzędzie graficzne do zarządzania bazami danych, w tym celu możesz:

sudo apt-get install postgresql pgadmin3 

Następnie musisz zmienić hasło użytkownika Postgre, a następnie:

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

W swoim pliku settings.py robisz:

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

Dodatkowy:

Jeśli chcesz utworzyć bazę danych za pomocą wiersza poleceń, możesz po prostu zrobić:

- 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;

W swoim pliku settings.py robisz:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}
Gregory
źródło
9

Może się to wydawać trochę długie, ale zadziałało bez żadnego błędu.

Najpierw zainstaluj phppgadmin z Ubuntu Software Center.

Następnie wykonaj te kroki w terminalu.

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

Uruchom serwer Apache

sudo service apache2 start

Teraz uruchom to również w terminalu, aby edytować plik Apache.

sudo gedit /etc/apache2/apache2.conf

Dodaj następujący wiersz do otwartego pliku:

Include /etc/apache2/conf.d/phppgadmin

Teraz przeładuj apache. Użyj terminala.

sudo /etc/init.d/apache2 reload

Teraz będziesz musiał stworzyć nową bazę danych. Zaloguj się jako użytkownik „postgres”. Kontynuuj w terminalu.

sudo su - postgres

W przypadku problemów z hasłem „postgres”, możesz je zmienić, korzystając z odpowiedzi tutaj https://stackoverflow.com/a/12721020/1990793 i kontynuować wykonywanie kroków.

Teraz utwórz bazę danych

createdb <db_name>

Teraz utwórz nowego użytkownika, aby zalogować się do phppgadmin później, podając nowe hasło.

createuser -P <new_user>

Teraz Twój postgressql został skonfigurowany i możesz przejść do:

http://localhost/phppgadmin/

i zaloguj się przy użyciu nowego utworzonego użytkownika, aby wyświetlić bazę danych.

Jibu James
źródło
po co zawracać sobie głowę php? Pytanie dotyczy Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin to popularne narzędzie administracyjne dla PostgreSQL. Nie zależy od języka / frameworka, w którym działa baza danych.
Jibu James
czy nie ma czegoś takiego jak Środowisko pracy MySQL dla Postgres?
Sidhin S Thomas
1
@SidhinThomas Tak, istnieje wiele narzędzi GUI podobnych do środowiska roboczego MySQL. Spójrz tutaj. wiki.postgresql.org/wiki/…
Jibu James
6

Możesz zainstalować "psycopg" za pomocą następującego polecenia:

# sudo easy_install psycopg2

Alternatywnie możesz użyć pip:

# pip install psycopg2

easy_install i pip są zawarte w ActivePython lub ręcznie instalowane z odpowiednich witryn projektu .

Lub po prostu pobierz wstępnie wbudowany instalator systemu Windows .

Sandro Munda
źródło
2
Lub sudo apt-get install python-psycopg2jeśli jesteś w systemie Debian i chcesz użyć menedżera pakietów zamiast pip / easy_install.
Blair
4

Bezpośrednim problemem wydaje się być brak modułu psycopg .

aptwebapps
źródło
3

Jeśli używasz Fedory 20, Django 1.6.5, postgresql 9.3. * I potrzebujesz modułu psycopg2, zrób to:

yum install postgresql-devel
easy_install psycopg2

Jeśli jesteś podobny do mnie, możesz mieć problem ze znalezieniem dobrze udokumentowanego pliku rpm libpq-dev… Powyższe działało dla mnie właśnie teraz.

MIke Kennedy
źródło
3

Miałem ten sam problem na komputerze Mac .

Rozwiązaniem było użycie tylko PIP do zainstalowania wszystkiego i dotknięcia niektórych rzeczy.

Najpierw zainstaluj PIP z: https://pip.pypa.io/en/latest/

Następnie chcesz się upewnić, czy ścieżka do pg_config znajduje się w Twojej PATH (echo $ PATH), jeśli nie, możesz edytować swój bash_profile:

vi /Users/<user>/.bash_profile

i dodaj tę linię:

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

Jeśli nie wiesz, gdzie jest pg_config, możesz użyć narzędzia „locate”, ale upewnij się, że plik locate.db jest aktualny (używałem starego locate.db i ścieżek, które nie istnieją).

sudo /usr/libexec/locate.updatedb
locate pg_config

Następnie zainstaluj Django (w razie potrzeby) i psycopg2.

sudo pip install Django
sudo pip install psycopg2

A potem w settings.py (localhost: defaultport)

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

Pozdrawiam!

Juan Pablo Arriagada Cancino
źródło
2
$ sudo apt-get install libpq-dev

Rok, to rozwiązuje mój problem. Po wykonaniu tego wykonaj: pip install psycopg2

Gregory
źródło
0

Należy pamiętać, że instalacja psycopg2przez pip lub setup.py wymaga posiadania programu Visual Studio 2008 (a dokładniej pliku wykonywalnego vcvarsall.bat ). Jeśli nie masz uprawnień administratora, aby go zainstalować lub ustawić odpowiednią zmienną PATH w systemie Windows, możesz pobrać już skompilowaną bibliotekę stąd .

Siergiej Iwanow
źródło
A co z tym? Kompilator Microsoft Visual C ++ dla Pythona 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP