Comment configurer une base de données PostgreSQL dans Django

107

Je suis nouveau sur Python et Django.

Je configure un projet Django à l'aide d'un moteur de base de données PostgreSQL, mais j'obtiens des erreurs sur chaque opération de base de données. Par exemple, lorsque je cours manage.py syncdb, j'obtiens:

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

Quelqu'un peut-il me donner une idée de ce qui se passe?

André
la source
11
Cela semble assez clair: il n'y a pas de module nommé psycopg. L'avez-vous installé?
Daniel Roseman
Non, je n'ai pas. Je vais essayer de le faire
André
1
quelqu'un peut-il dire pourquoi avons-nous besoin de psycopg2 avec django?
Amrit

Réponses:

210

Vous devez installer la psycopg2bibliothèque Python.

Installation


Téléchargez http://initd.org/psycopg/ , puis installez-le sous Python PATH

Après le téléchargement, extrayez facilement l'archive tar et:

$ python setup.py install

Ou si vous le souhaitez, installez-le soit easy_install ou pip .

( Je préfère utiliser pip sur easy_install sans raison. )

  • $ easy_install psycopg2
  • $ pip install psycopg2

Configuration


dans les paramètres .py

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

- D'autres instructions d'installation peuvent être trouvées sur la page de téléchargement et la page d'installation .

Alireza Savand
la source
2
Salut, je suis vos instructions mais il semble que je devrais créer la paire utilisateur / pwd avant de les utiliser dans le settings.py?
Yulong
2
mais j'obtiens ça psycopg2.OperationalError: fe_sendauth: no password suppliedquand je cours python manage.py syncdb. J'ai défini un nom de table et un nom d'utilisateur aléatoires.
Yulong
1
@RedRory Merci, ils vont bien maintenant;)
Alireza Savand
1
Pour info: à partir de Django 1.9, vous pouvez dire: 'ENGINE': 'django.db.backends.postgresql',
powlo
1
Le problème que j'ai eu avec cette réponse est que django.db.backends.postgresqlne fonctionne pas avec psycopg2. ce qui a fonctionné est le django.db.backends.postgresql_psycopg2back-end et évité de spécifier le numéro de port car il change à chaque fois que vous démarrez pgAdmin sous Windows
Mustapha-Belkacim
31

Assurez-vous également que le package de développement PostgreSQL est installé. Sur Ubuntu, vous devez faire quelque chose comme ceci:

$ sudo apt-get install libpq-dev
Dennis Bunskoek
la source
21

Pas à pas que j'utilise:

 - 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

Vous voudrez peut-être installer un outil graphique pour gérer vos bases de données, pour cela vous pouvez faire:

sudo apt-get install postgresql pgadmin3 

Après, vous devez changer le mot de passe de l'utilisateur Postgre, puis faire:

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

Sur votre fichier settings.py, vous faites:

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

Supplémentaire:

Si vous souhaitez créer la base de données en utilisant la ligne de commande, vous pouvez simplement faire:

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

Sur votre fichier settings.py, vous faites:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'djangouser',
        'PASSWORD': 'myPasswordHere',
        'HOST': '',
        'PORT': '',
    }
}
Grégory
la source
9

Cela peut sembler un peu long, mais cela a fonctionné pour moi sans aucune erreur.

Dans un premier temps, installez phppgadmin à partir du centre logiciel Ubuntu.

Ensuite, exécutez ces étapes dans le terminal.

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

Démarrez le serveur Apache

sudo service apache2 start

Maintenant, exécutez-le également dans le terminal pour éditer le fichier apache.

sudo gedit /etc/apache2/apache2.conf

Ajoutez la ligne suivante au fichier ouvert:

Include /etc/apache2/conf.d/phppgadmin

Maintenant, rechargez Apache. Utilisez le terminal.

sudo /etc/init.d/apache2 reload

Vous devrez maintenant créer une nouvelle base de données. Connectez-vous en tant qu'utilisateur 'postgres'. Continuez dans le terminal.

sudo su - postgres

Si vous rencontrez des problèmes avec le mot de passe de 'postgres', vous pouvez le modifier en utilisant la réponse ici https://stackoverflow.com/a/12721020/1990793 et continuer avec les étapes.

Créez maintenant une base de données

createdb <db_name>

Créez maintenant un nouvel utilisateur pour vous connecter à phppgadmin plus tard, en fournissant un nouveau mot de passe.

createuser -P <new_user>

Maintenant, votre postgressql a été configuré et vous pouvez aller à:

http://localhost/phppgadmin/

et connectez-vous en utilisant le nouvel utilisateur que vous avez créé, afin d'afficher la base de données.

Jibu James
la source
pourquoi s'embêter avec php? La question concerne Django ...?
Sidhin S Thomas
1
@SidhinThomas phpPgAdmin est un outil d'administration courant pour PostgreSQL. Cela ne dépend pas de la langue / structure sur laquelle la base de données s'exécute.
Jibu James
n'y a-t-il rien de tel que MySQL workbench pour Postgres?
Sidhin S Thomas
1
@SidhinThomas Oui, il existe de nombreux outils d'interface graphique similaires à MySQL workbench. Jetez un œil ici. wiki.postgresql.org/wiki/…
Jibu James
6

Vous pouvez installer "psycopg" avec la commande suivante:

# sudo easy_install psycopg2

Vous pouvez également utiliser pip:

# pip install psycopg2

easy_install et pip sont inclus avec ActivePython ou installés manuellement à partir des sites de projet respectifs .

Ou, procurez-vous simplement le programme d'installation Windows prédéfini .

Sandro Munda
la source
2
Ou sudo apt-get install python-psycopg2si vous êtes sur un système Debian et que vous souhaitez utiliser le gestionnaire de paquets plutôt que pip / easy_install.
Blair
4

Le problème immédiat semble être qu'il vous manque le module psycopg .

aptwebapps
la source
3

Si vous utilisez Fedora 20, Django 1.6.5, postgresql 9.3. * Et que vous avez besoin du module psycopg2, procédez comme suit:

yum install postgresql-devel
easy_install psycopg2

Si vous êtes comme moi, vous pourriez avoir du mal à trouver le rpm libpq-dev bien documenté ... Ce qui précède a fonctionné pour moi en ce moment.

MIke Kennedy
la source
3

J'avais le même problème sur Mac .

La solution était d'utiliser uniquement PIP pour tout installer et de toucher certaines choses.

Installez d'abord PIP depuis: https://pip.pypa.io/en/latest/

Ensuite, vous voulez vous assurer que le chemin vers pg_config est dans votre PATH (echo $ PATH), sinon vous pouvez éditer votre bash_profile:

vi /Users/<user>/.bash_profile

et ajoutez cette ligne:

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

Si vous ne savez pas où se trouve pg_config, vous pouvez utiliser l'outil "Locate", mais assurez-vous que votre Locate.db est à jour (j'utilisais un ancien Locate.db et des chemins qui n'existent pas).

sudo /usr/libexec/locate.updatedb
locate pg_config

Ensuite, installez Django (si nécessaire) et psycopg2.

sudo pip install Django
sudo pip install psycopg2

Et puis dans settings.py (localhost: defaultport)

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

Salut!

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

Année, cela résout mon problème. Après avoir exécuté ceci, faites: pip install psycopg2

Grégory
la source
0

Veuillez noter que l'installation de psycopg2via pip ou setup.py nécessite d'avoir Visual Studio 2008 (plus précisément le fichier exécutable vcvarsall.bat ). Si vous ne disposez pas des droits d'administrateur pour l'installer ou définir la variable PATH appropriée sous Windows, vous pouvez télécharger la bibliothèque déjà compilée à partir d' ici .

Sergueï Ivanov
la source
Et ça? Compilateur Microsoft Visual C ++ pour Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP