logo cosasdedevs

Cómo conectar una base de datos PostgreSQL con Django

Cómo conectar una base de datos PostgreSQL con Django

My Profile
Abr 23, 2020

¡Hola! Para el tuto de hoy quiero recuperar un proyecto que hicimos aquí hace unos meses y es el proyecto de crear un blog simple con Django. Había empezado a crear un tutorial sobre como hacer un deploy de un proyecto hecho en Django y me pareció buena idea usar este proyecto. Como guinda pensé que sería un buen añadido la conexión a la base de datos en PostgreSQL así que primero añadiré este tutorial y próximamente el tutorial para el deploy del proyecto.

Sin más preámbulos os dejo el tuto 👇

Lo primero que haremos será instalar PostgreSQL en nuestra máquina, para el caso de Windows es muy fácil, solo necesitamos ir a la página de descargas de Postgresql y descargar el instalador, después será siguiente, siguiente, siguiente y listo. Además nos instala un entorno visual, para ello buscamos pgAdmin en el buscador de Windows y nos lo abrirá en el navegador.

Con Mac es exactamente igual, si también queréis añadir pgAdmin lo podéis descargar desde aquí.

Para Ubuntu tendremos que hacerlo desde la terminal pero es super fácil así que cero problemas, solo tendremos que lanzar el siguiente comando y ya lo tenemos listo:

sudo apt install postgresql postgresql-contrib

Para instalarlo en otras distribuciones de Linux podéis consultar la información en la página de descargas de PostgreSQL.

Lo siguiente que haremos será crear nuestro usuario y la base de datos, si lo queremos hacer desde pgAdmin, solo tenéis que abrir pgAdmin, pulsamos con el botón derecho en PostgreSQL <version>, seleccionamos create y después Login/Group Role.

Una vez hecho esto se nos abrirá una ventana ahí nos pedirá el nombre de usuario y si queremos añadir unos comentarios, añadimos el nombre que queramos y listo.

Después vamos a la pestaña Definition donde definiremos la contraseña del usuario.

Ahora pasamos a Privileges, ahí habilitaremos los permisos que se muestran a continuación.

Pulsamos save y listo, ya tenemos nuestro usuario 💪

Para crear la base de datos pulsamos en Databases con el botón derecho, create y Database.

Nos abrirá una ventana, ahí añadiremos el nombre de la base de datos y seleccionaremos como propietario el usuario que acabamos de crear.

Ahora aprenderemos a crear nuestro usuario y base de datos por consola, para ello abrimos una terminal (en Windows se instala SQL Shell así que si lo estáis haciendo en Windows y no queréis usar pgAdmin lo podéis hacer desde ahí).

Al instalar PostgreSQL nos crea el super usuario postgres que es el que usaremos para crear nuestro nuevo usuario. Lanzamos el siguiente comando:

sudo -u postgres createuser --interactive

Primero nos pedirá el nombre del usuario y luego nos preguntará si queremos que el nuevo usuario sea super usuario, le decimos que sí y listo.

Ahora vamos a añadir un password a nuestro usuario, para ello primero entraremos en la consola de PostgreSQL.

sudo -u postgres psql

Y ahora añadimos la siguiente línea con el password y el usuario al que se lo queremos asignar.

alter user <mi-usuario> with password '<mi-contraseña>';

Si todo ha salido bien nos retornará ALTER ROLE.

Por último para crear la base de datos manteniéndonos en  la consola de PostgreSQL lanzar la siguiente sentencia sql:

CREATE DATABASE simpleblog
    WITH 
    OWNER = simpleblog
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;

Y listo, ya lo tenemos todo para usar PostgreSQL en nuestro proyecto.

Ahora toca modificar el proyecto para poder usar PostgreSQL así que manos a la obra 👷‍♂️

El siguiente paso será instalar la librería de Python para trabajar con PostgreSQL que en nuestro caso será psycopg2. Activamos nuestro entorno virtual y lanzamos el siguiente comando:

pip install psycopg2

Si tenéis dudas sobre este proceso podéis ir a la primera parte del tutorial sobre cómo crear un blog con Django donde explico estas cosas.

También instalaremos django-environ para poder usar variables de entorno, ahí es donde guardaremos la información en relación con la conexión a la base de datos.

pip install django-environ

Creamos el archivo .env dentro del directorio donde se encuentra nuestro archivo settings.py y añadimos la siguiente info:

SECRET_KEY=<my_secret_key>

POSTGRESQL_NAME=<posgresql_database>
POSTGRESQL_USER=<posgresql_user>
POSTGRESQL_PASS=<postgresql_pass>
POSTGRESQL_HOST=localhost
POSTGRESQL_PORT=5432
DEBUG=True

Para el SECRET_KEY podemos utilizar el que se genera en nuestro proyecto Django al crearlo dentro del archivo settings.py.

Ahora abrimos el archivo settings.py para realizar los cambios para conectarnos a PostgreSQL e importamos la librería environ:

import environ
env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

Después sustituimos los valores de las constantes SECRET_KEY y DEBUG por los guardados en nuestras variables de entorno.

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env('DEBUG')

Ahora modificamos la constante DATABASES para utilizar PostgreSQL y añadimos la información relativa a los accesos.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env('POSTGRESQL_NAME'),
        'USER': env('POSTGRESQL_USER'),
        'PASSWORD': env('POSTGRESQL_PASS'),
        'HOST': env('POSTGRESQL_HOST'),
        'PORT': env('POSTGRESQL_PORT'),
    }
}

Ahora que ya tenemos esto, hacemos el makemigrations y migrate para crear nuestras tablas en la base de datos. Si tienes dudas sobre como crear las tablas puedes mirar la segunda parte del tutorial sobre cómo crear un blog con Django.

python manage.py makemigrations
python manage.py migrate

Una vez creadas las tablas, crearemos un super usuario para acceder al panel de admin.

python manage.py createsuperuser

Por último, entramos en el panel de admin para confirmar que todo está ok.

http://127.0.0.1:8000/admin/

Y esto es todo, ahora podremos usar una super base de datos en nuestro proyecto como es PostgreSQL, recordad que tenéis el proyecto en mi github y nos vemos en el siguiente post 😉.

479 vistas

Nos tomamos en serio tu privacidad

Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario a través de su navegación. Si pulsas entendido aceptas su uso. Ver política de cookies.

🐍 Sígueme en Twitter

Si te gusta el contenido que subo y no quieres perderte nada, sígueme en Twitter y te avisaré cada vez que cree contenido nuevo 💪
Luego ¡Te sigo!