Cómo conectar una base de datos PostgreSQL con Django
¡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 cuyo nombre será igual al de nuestro proyecto, (donde se encuentra el archivo de configuración 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
Ahora, lanzamos el comando para arrancar el proyecto en local:
python manage.py runserver
Una vez hecho esto, podremos entrar en el panel de admin para confirmar que todo está ok.
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 😉.
Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.
Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.
Nos leemos 👋.