Cómo configurar una base de datos PostgreSQL en Django


107

Soy nuevo en Python y Django.

Estoy configurando un proyecto de Django usando un motor de base de datos PostgreSQL, pero obtengo errores en cada operación de la base de datos. Por ejemplo, cuando corro manage.py syncdb, obtengo:

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

¿Alguien puede darme una pista de lo que está pasando?


11
Parece bastante claro: no hay ningún módulo llamado psycopg. ¿Lo has instalado?
Daniel Roseman

No, no lo he hecho. Intentaré hacerlo
André

1
¿Alguien puede decir por qué necesitamos psycopg2 con django?
Amrit

Respuestas:


210

Necesitas instalar la psycopg2biblioteca Python.

Instalación


Descargue http://initd.org/psycopg/ , luego instálelo en Python PATH

Después de la descarga, extraiga fácilmente el tarball y:

$ python setup.py install

O si lo desea, instálelo mediante easy_install o pip .

( Prefiero usar pip sobre easy_install sin ningún motivo ) .

  • $ easy_install psycopg2
  • $ pip install psycopg2

Configuración


en la configuración .py

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

- Otras instrucciones de instalación se pueden encontrar en la página de descarga y la página de instalación .


2
Hola, sigo tus instrucciones pero parece que debería crear el par usuario / pwd antes de usarlos en settings.py.
Yulong

2
pero consigo esto psycopg2.OperationalError: fe_sendauth: no password suppliedcuando corro python manage.py syncdb. Configuré el nombre de la tabla aleatoria y el nombre de usuario.
Yulong

1
@RedRory Gracias, están bien ahora;)
Alireza Savand

1
Para su información: A partir de Django 1.9 puede decir: 'ENGINE': 'django.db.backends.postgresql',
powlo

1
El problema que tuve con esta respuesta es que django.db.backends.postgresqlno funciona psycopg2. lo que funcionó es el django.db.backends.postgresql_psycopg2back-end y evitó especificar el número de puerto, ya que cambia cada vez que inicia pgAdmin en Windows
Mustapha-Belkacim

31

También asegúrese de tener instalado el paquete de desarrollo de PostgreSQL. En Ubuntu necesitas hacer algo como esto:

$ sudo apt-get install libpq-dev

21

Paso a paso que utilizo:

 - 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

Es posible que desee instalar una herramienta gráfica para administrar sus bases de datos, para eso puede hacer:

sudo apt-get install postgresql pgadmin3 

Después, debe cambiar la contraseña de usuario de Postgre, luego haga lo siguiente:

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

En su archivo settings.py lo hace:

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

Extra:

Si desea crear la base de datos usando la línea de comando, puede hacer lo siguiente:

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

En su archivo settings.py lo hace:

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

9

Esto puede parecer un poco largo, pero funcionó para mí sin ningún error.

Al principio, instale phppgadmin desde el Centro de software de Ubuntu.

Luego, ejecute estos pasos en la terminal.

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

Inicie el servidor apache

sudo service apache2 start

Ahora ejecute esto también en la terminal, para editar el archivo apache.

sudo gedit /etc/apache2/apache2.conf

Agregue la siguiente línea al archivo abierto:

Include /etc/apache2/conf.d/phppgadmin

Ahora recargue apache. Utilice terminal.

sudo /etc/init.d/apache2 reload

Ahora tendrás que crear una nueva base de datos. Inicie sesión como usuario 'postgres'. Continuar en la terminal.

sudo su - postgres

En caso de que tenga problemas con la contraseña de 'postgres', puede cambiarla usando la respuesta aquí https://stackoverflow.com/a/12721020/1990793 y continúe con los pasos.

Ahora crea una base de datos

createdb <db_name>

Ahora cree un nuevo usuario para iniciar sesión en phppgadmin más tarde, proporcionando una nueva contraseña.

createuser -P <new_user>

Ahora su postgressql ha sido configurado y puede ir a:

http://localhost/phppgadmin/

e inicie sesión con el nuevo usuario que ha creado para ver la base de datos.


¿por qué molestarse con php? ¿La pregunta es sobre Django ...?
Sidhin S Thomas

1
@SidhinThomas phpPgAdmin es una herramienta de administración común para PostgreSQL. No depende del idioma / marco en el que se ejecute la base de datos.
Jibu James

¿No hay nada parecido a MySQL workbench para Postgres?
Sidhin S Thomas

1
@SidhinThomas Sí, hay muchas herramientas GUI similares a MySQL workbench. Echa un vistazo aquí. wiki.postgresql.org/wiki/…
Jibu James

6

Puede instalar "psycopg" con el siguiente comando:

# sudo easy_install psycopg2

Alternativamente, puede usar pip:

# pip install psycopg2

easy_install y pip se incluyen con ActivePython o se instalan manualmente desde los respectivos sitios del proyecto .

O simplemente obtenga el instalador de Windows prediseñado .


2
O sudo apt-get install python-psycopg2si está en un sistema Debian y desea utilizar el administrador de paquetes en lugar de pip / easy_install.
Blair


3

Si está utilizando Fedora 20, Django 1.6.5, postgresql 9.3. * Y necesita el módulo psycopg2, haga esto:

yum install postgresql-devel
easy_install psycopg2

Si es como yo, es posible que tenga problemas para encontrar el libpq-dev rpm bien documentado ... Lo anterior funcionó para mí en este momento.


3

Estaba teniendo el mismo problema en Mac .

La solución fue usar solo PIP para instalar todo y tocar algunas cosas.

Primero instale PIP desde: https://pip.pypa.io/en/latest/

Luego, desea asegurarse de que la ruta a pg_config esté en su PATH (echo $ PATH), si no, puede editar su bash_profile:

vi /Users/<user>/.bash_profile

y agregue esta línea:

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

Si no sabe dónde está pg_config, puede usar la herramienta "localizar", pero asegúrese de que su Locate.db esté actualizado (yo estaba usando un location.db antiguo y usando rutas que no existen).

sudo /usr/libexec/locate.updatedb
locate pg_config

Luego instale Django (si es necesario) y psycopg2.

sudo pip install Django
sudo pip install psycopg2

Y luego en settings.py (localhost: defaultport)

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

¡Saludos!


2
$ sudo apt-get install libpq-dev

Año, esto resuelve mi problema. Después de ejecutar esto, haga: pip install psycopg2


0

Tenga en cuenta que la instalación de psycopg2via pip o setup.py requiere tener Visual Studio 2008 (más precisamente el archivo ejecutable vcvarsall.bat ). Si no tiene derechos de administrador para instalarlo o establecer la variable PATH apropiada en Windows, puede descargar la biblioteca ya compilada desde aquí .


¿Qué pasa con esto? Compilador de Microsoft Visual C ++ para Python 2.7 == >> microsoft.com/en-us/download/details.aspx?id=44266
Ajeeb.KP

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.