So richten Sie eine PostgreSQL-Datenbank in Django ein

107

Ich bin neu in Python und Django.

Ich konfiguriere ein Django-Projekt mithilfe eines PostgreSQL-Datenbankmodul-Backends, erhalte jedoch bei jedem Datenbankvorgang Fehler. Wenn ich zum Beispiel renne manage.py syncdb, bekomme ich:

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

Kann mir jemand einen Hinweis geben, was los ist?

André
quelle
11
Scheint ganz klar zu sein: Es gibt kein Modul namens Psycopg. Hast du es installiert?
Daniel Roseman
Nein, habe ich nicht. Ich werde versuchen, es zu tun
André
1
Kann jemand sagen, warum wir Psycopg2 mit Django brauchen?
Amrit

Antworten:

210

Sie müssen die psycopg2Python-Bibliothek installieren .

Installation


Laden Sie http://initd.org/psycopg/ herunter und installieren Sie es unter Python PATH

Extrahieren Sie nach dem Herunterladen einfach den Tarball und:

$ python setup.py install

Wenn Sie möchten, installieren Sie es entweder mit easy_install oder pip .

( Ich bevorzuge es, ohne Grund pip gegenüber easy_install zu verwenden. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Aufbau


in den Einstellungen .py

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

- Weitere Installationsanweisungen finden Sie auf der Download- und Installationsseite .

Alireza Savand
quelle
2
Hallo, ich folge Ihrer Anweisung, aber es scheint, dass ich das Benutzer / PWD-Paar erstellen sollte, bevor ich sie in der settings.py verwende.
Yulong
2
aber ich bekomme das, psycopg2.OperationalError: fe_sendauth: no password suppliedwenn ich renne python manage.py syncdb. Ich habe einen zufälligen Tabellennamen und einen Benutzernamen festgelegt.
Yulong
1
@ RedRory Danke, es geht ihnen jetzt gut;)
Alireza Savand
1
Zu Ihrer
Information
1
Das Problem, das ich mit dieser Antwort hatte, ist, dass es django.db.backends.postgresqlnicht funktioniert psycopg2. Was funktioniert hat, ist das django.db.backends.postgresql_psycopg2Back-End und es wurde vermieden, die Portnummer anzugeben, da sie sich jedes Mal ändert, wenn Sie pgAdmin unter Windows starten
Mustapha-Belkacim
31

Stellen Sie außerdem sicher, dass Sie das PostgreSQL-Entwicklungspaket installiert haben. Unter Ubuntu müssen Sie Folgendes tun:

$ sudo apt-get install libpq-dev
Dennis Bunskoek
quelle
21

Schritt für Schritt, den ich benutze:

 - 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

Möglicherweise möchten Sie ein Grafiktool installieren, um Ihre Datenbanken zu verwalten. Dazu haben Sie folgende Möglichkeiten:

sudo apt-get install postgresql pgadmin3 

Danach müssen Sie das Postgre-Benutzerkennwort ändern und dann Folgendes tun:

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

In Ihrer Datei settings.py tun Sie Folgendes:

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

Extra:

Wenn Sie die Datenbank über die Befehlszeile erstellen möchten, gehen Sie einfach wie folgt vor:

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

In Ihrer Datei settings.py tun Sie Folgendes:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}
Gregory
quelle
9

Das mag etwas langwierig erscheinen, hat aber bei mir fehlerfrei funktioniert.

Installieren Sie zunächst phppgadmin vom Ubuntu Software Center.

Führen Sie dann diese Schritte im Terminal aus.

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

Starten Sie den Apache-Server

sudo service apache2 start

Führen Sie dies nun auch im Terminal aus, um die Apache-Datei zu bearbeiten.

sudo gedit /etc/apache2/apache2.conf

Fügen Sie der geöffneten Datei die folgende Zeile hinzu:

Include /etc/apache2/conf.d/phppgadmin

Laden Sie nun Apache neu. Terminal verwenden.

sudo /etc/init.d/apache2 reload

Jetzt müssen Sie eine neue Datenbank erstellen. Melden Sie sich als 'postgres'-Benutzer an. Fahren Sie im Terminal fort.

sudo su - postgres

Falls Sie Probleme mit dem Passwort von 'postgres' haben, können Sie es mit der Antwort hier ändern https://stackoverflow.com/a/12721020/1990793 und mit den Schritten fortfahren.

Erstellen Sie nun eine Datenbank

createdb <db_name>

Erstellen Sie nun einen neuen Benutzer, um sich später bei phppgadmin anzumelden, und geben Sie ein neues Passwort ein.

createuser -P <new_user>

Jetzt wurde Ihr postgressql eingerichtet und Sie können gehen zu:

http://localhost/phppgadmin/

und melden Sie sich mit dem neuen Benutzer an, den Sie erstellt haben, um die Datenbank anzuzeigen.

Jibu James
quelle
warum sich mit PHP beschäftigen? Die Frage ist über Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin ist ein gängiges Verwaltungstool für PostgreSQL. Es hängt nicht davon ab, auf welcher Sprache / welchem ​​Framework die Datenbank ausgeführt wird.
Jibu James
Gibt es nicht so etwas wie MySQL Workbench für Postgres?
Sidhin S Thomas
1
@SidhinThomas Ja, es gibt viele GUI-Tools, die der MySQL-Workbench ähneln. Schauen Sie hier. wiki.postgresql.org/wiki/…
Jibu James
6

Sie können "psycopg" mit dem folgenden Befehl installieren:

# sudo easy_install psycopg2

Alternativ können Sie pip verwenden:

# pip install psycopg2

easy_install und pip sind in ActivePython enthalten oder werden manuell von den jeweiligen Projektstandorten installiert .

Oder holen Sie sich einfach das vorgefertigte Windows-Installationsprogramm .

Sandro Munda
quelle
2
Oder sudo apt-get install python-psycopg2wenn Sie sich auf einem Debian-System befinden und den Paketmanager anstelle von pip / easy_install verwenden möchten.
Blair
4

Das unmittelbare Problem scheint zu sein, dass Sie das Psycopg- Modul vermissen .

aptwebapps
quelle
3

Wenn Sie Fedora 20, Django 1.6.5, postgresql 9.3. * Verwenden und das psycopg2-Modul benötigen, gehen Sie folgendermaßen vor:

yum install postgresql-devel
easy_install psycopg2

Wenn Sie wie ich sind, haben Sie möglicherweise Probleme, die gut dokumentierte libpq-dev-Drehzahl zu finden ... Das oben Gesagte hat gerade für mich funktioniert.

MIke Kennedy
quelle
3

Ich hatte das gleiche Problem auf dem Mac .

Die Lösung bestand darin, nur PIP zu verwenden, um alles zu installieren und einige Dinge zu berühren.

Installieren Sie PIP zuerst von: https://pip.pypa.io/en/latest/

Dann möchten Sie sicherstellen, dass sich der Pfad zu pg_config in Ihrem PATH befindet (echo $ PATH). Andernfalls können Sie Ihr bash_profile bearbeiten:

vi /Users/<user>/.bash_profile

und fügen Sie diese Zeile hinzu:

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

Wenn Sie nicht wissen, wo sich pg_config befindet, können Sie das Tool "lokalisieren" verwenden, aber stellen Sie sicher, dass Ihre Datei "find.db" auf dem neuesten Stand ist (ich habe eine alte Datei "ocate.db "verwendet und Pfade verwendet, die nicht vorhanden sind).

sudo /usr/libexec/locate.updatedb
locate pg_config

Installieren Sie dann Django (falls erforderlich) und psycopg2.

sudo pip install Django
sudo pip install psycopg2

Und dann in settings.py (localhost: defaultport)

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

Grüße!

Juan Pablo Arriagada Cancino
quelle
2
$ sudo apt-get install libpq-dev

Jahr, das löst mein Problem. Führen Sie danach Folgendes aus: pip install psycopg2

Gregory
quelle
0

Bitte beachten Sie, dass für die Installation von psycopg2via pip oder setup.py Visual Studio 2008 (genauer gesagt die ausführbare Datei vcvarsall.bat ) erforderlich ist . Wenn Sie keine Administratorrechte haben, um es zu installieren oder die entsprechende PATH-Variable unter Windows festzulegen, können Sie die bereits kompilierte Bibliothek von hier herunterladen .

Sergey Ivanov
quelle
Was ist damit? Microsoft Visual C ++ - Compiler für Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP