Saltar al contenido principal
InicioTutorialesPython

Uso de PostgreSQL en Python

Descubra cómo crear, conectar y gestionar bases de datos PostgreSQL utilizando el paquete psycopg2 de Python.
may 2024  · 14 min leer

Los datos están en el corazón de casi todas las aplicaciones digitales que pueda imaginar. Desde aplicaciones móviles y juegos de ordenador hasta herramientas bancarias y vehículos autónomos, todo se basa en datos. ¿Dónde se almacenan todos estos datos? La respuesta son las bases de datos. 

Una base de datos es una colección organizada de datos estructurados, normalmente almacenados electrónicamente en un sistema informático. A pesar del reciente desarrollo de nuevos tipos de bases de datos (diseñadas para hacer frente al creciente volumen y variabilidad de los datos), una cantidad considerable de datos en todo el mundo sigue almacenándose en lo que se conoce como bases de datos relacionales. Las bases de datos relacionales almacenan los datos como colecciones de tablas predefinidas con filas y columnas que están conectadas a través de una o varias relaciones. 

Ser capaz de manejar y extraer datos de estas bases es una habilidad esencial en el sector de los datos y cada vez más demandada. La forma estándar de crear y gestionar bases de datos es SQL (Structured Query Language). SQL es la base de algunas de las bases de datos relacionales más populares del mercado, como PostgreSQL, Microsoft SQL Server, MySQL y SQLite.

En este tutorial, nos centraremos en las bases de datos basadas en PostgreSQL y en cómo puedes crearlas, conectarte a ellas y gestionarlas utilizando Python. El tándem SQL-Python es una de las habilidades imprescindibles que debes dominar a lo largo de tu viaje por la ciencia de datos. Para conectar Python con PostgreSQL, utilizaremos el paquete psycopg2, el adaptador de bases de datos PostgreSQL más popular para Python. ¿Listo para el reto? Empecemos.

Comprender PostgreSQL

PostgreSQL es una base de datos relacional ligera, gratuita y de código abierto. Gracias a su probada arquitectura, fiabilidad, integridad de los datos y fácil integración con otros lenguajes de programación populares, como Python y R, PostgreSQL goza de una gran aceptación en el sector, con empresas de todos los tamaños y regiones que lo utilizan. 

PostgreSQL utiliza y amplía el lenguaje SQL combinado con muchas funciones que almacenan y escalan con seguridad las cargas de trabajo de datos más complicadas. 

Para empezar a utilizar PostgreSQL, primero tienes que instalarlo en tu ordenador. En el sitio oficial de PostgreSQL, puede encontrar los numerosos paquetes e instaladores de PostgreSQL listos para usar y un archivo de código fuente disponible para diferentes plataformas y casos de uso.

Para este tutorial, vamos a utilizar Postgres App, una sencilla aplicación nativa de macOS que incluye todas las características necesarias para empezar con PostgreSQL, pero tenga en cuenta que todos los demás paquetes disponibles son igualmente válidos, y la sintaxis de PostgreSQL para ejecutar consultas es la misma en todos los paquetes.

Si quieres saber más sobre PostgreSQL, consulta nuestra Guía de PostgreSQL para principiantes y el buen número de cursos de SQL.

Comprender psycopg2

Para conectarte a una base de datos ya creada en tu sistema o en Internet, tendrás que indicarle a Python cómo detectarla. En otras palabras, tendrás que decirle a Python que la base de datos que te interesa es una base de datos PostgreSQL. 

En Python, tienes varias opciones entre las que puedes elegir. En este caso, utilizaremos psycopg2, probablemente el adaptador de base de datos PostgreSQL más popular para Python. Psycopg2 requiere algunos requisitos previos para funcionar correctamente en su ordenador. Una vez que los haya instalado (lea la documentación para más información), puede instalar psycopg2 como cualquier otro paquete Python:

pip install psycopg2

Sin embargo, si desea utilizar psycopg2 directamente, también puede instalar psycopg2-binary, una versión independiente del paquete, que no requiere compilador ni bibliotecas externas. Esta es la instalación preferida para los nuevos usuarios.

pip install psycopg2-binary

Por último, si está utilizando Python en un entorno Conda, debe instalar psycopg2 utilizando el comando Instalación en Anaconda:

conda install -c anaconda psycopg2

Ahora que ya está todo listo, ¡vamos a crear su primera conexión a su sesión PostgreSQL con psycopg2!

Conexión de Python a PostgreSQL

Con el fin de utilizar Python para interactuar con una base de datos PostgreSQL, tenemos que hacer una conexión. Esto se hace con la función psycopg2 connect(), que crea una nueva sesión de base de datos y devuelve una nueva instancia de conexión.

Para este tutorial, nos conectaremos con una base de datos llamada "datacamp_courses" que está alojada localmente. 

conn = psycopg2.connect(database = "datacamp_courses", 
                        user = "datacamp", 
                        host= 'localhost',
                        password = "postgresql_tutorial",
                        port = 5432)

Los parámetros básicos de conexión necesarios son:

  • base de datos. El nombre de la base de datos.
  • usuario. Nombre de usuario necesario para autenticarse.
  • contraseña. Contraseña utilizada para autenticarse.
  • anfitrión. Dirección del servidor de la base de datos (en nuestro caso, la base de datos está alojada localmente, pero podría ser una dirección IP).
  • puerto. Número de puerto de conexión (por defecto 5432 si no se indica).

Creación de una tabla en PostgreSQL

Es hora de crear su primera tabla en la base de datos "datacamp_courses". Queremos crear una tabla con información sobre algunos de los cursos del catálogo de cursos de DataCamp. La tabla tiene el siguiente esquema: 

Tabla de cursos DataCam

La especificación nos da bastante información sobre las columnas de la tabla. Laclave primaria de la tabla debe ser course_id (observe que sólo ésta está en negrita), y su tipo de datos debe ser un entero. Una clave primaria es una restricción que obliga a que los valores de las columnas no sean nulos y sean únicos. Permite identificar de forma unívoca una instancia o un conjunto de instancias presentes en la tabla. 

Las columnas restantes proporcionan información sobre el nombre del curso, el nombre de la instrucción del curso y el tema del curso.

Antes de crear la tabla, es importante explicar cómo funciona la instancia de conexión que acabas de crear. En esencia, la conexión encapsula una sesión de base de datos, y permite ejecutar comandos y consultas SQL, como SELECT, INSERT, CREATE, UPDATE, OR DELETE, utilizando el método cursor(), y hacer persistentes los cambios utilizando el método commit() .

Una vez creada la instancia del cursor, puede enviar comandos a la base de datos utilizando la función ejecutar() y recuperar datos de una tabla utilizando fetchone(), fetchmany()o fetchall().

Por último, es importante cerrar el cursor y la conexión con la base de datos cuando hayas terminado tus operaciones. De lo contrario, seguirán reteniendo recursos del lado del servidor. Para ello, puede utilizar elmétodo close() .

A continuación encontrará el código para crear la tabla datacamp_courses:

# Open a cursor to perform database operations
cur = conn.cursor()
# Execute a command: create datacamp_courses table
cur.execute("""CREATE TABLE datacamp_courses(
            course_id SERIAL PRIMARY KEY,
            course_name VARCHAR (50) UNIQUE NOT NULL,
            course_instructor VARCHAR (100) NOT NULL,
            topic VARCHAR (20) NOT NULL);
            """)
# Make the changes to the database persistent
conn.commit()
# Close cursor and communication with the database
cur.close()
conn.close()

Este es un ejemplo muy básico de cómo crear tablas en PostgreSQL, pero las cosas pueden ser mucho más complejas. Si desea obtener más información sobre cómo crear una base de datos PostgreSQL y explorar la estructura, los tipos de datos y cómo normalizar las bases de datos, consulte nuestro artículo Creando una Base de Datos PostgreSQL curso.

Ejecución de consultas básicas PostgreSQL en Python

La tabla datacamp_courses está lista; ahora es el momento de utilizar SQL para realizar algunas consultas básicas.

INSERTAR 

Te habrás dado cuenta de que la tabla no tiene valores hasta ahora. Para crear registros en la tabla datacamp_courses, necesitamos el comando INSERT.

cur = conn.cursor()

cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to SQL','Izzy Weber','Julia')");

cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Analyzing Survey Data in Python','EbunOluwa Andrew','Python')");

cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to ChatGPT','James Chapman','Theory')");

cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to Statistics in R','Maggie Matsui','R')");

cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Hypothesis Testing in Python','James Chapman','Python')");

conn.commit()
cur.close()
conn.close()

La tabla resultante tiene este aspecto:

course_id

course_name

course_instructor

tema

1

Introducción a SQL

Izzy Weber

Julia

2

Análisis de datos de encuestas en Python

EbunOluwa Andrew

Python

3

Introducción a ChatGPT

James Chapman

Teoría

4

Introducción a la Estadística en R

Maggie Matsui

R

5

Pruebas de hipótesis en Python

James Chapman

Python

SELECCIONE 

La lectura de datos en bases de datos SQL es probablemente algo que harás mucho en tu viaje por la ciencia de datos. Generalmente se denomina consulta a SELECT. De momento, veamos cómo se comporta la tabla datacamp_courses.

Llamaremos a la clásica sentencia SELECT * FROM nombre_base_de_datos para leer todos los datos disponibles en la tabla. A continuación, utilizaremos el método fetchall() para obtener todas las filas disponibles. Observe que PostgreSQL crea automáticamente un índice numérico para la columna course_id .

cur = conn.cursor()
cur.execute('SELECT * FROM datacamp_courses;')
rows = cur.fetchall()
conn.commit()
conn.close()
for row in rows:
    print(row)
(1, 'Introduction to SQL', 'Izzy Weber', 'Julia')
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Introduction to Statistics in R', 'Maggie Matsui', 'R')
(5, 'Hypothesis Testing in Python', 'James Chapman', 'Python')

ACTUALIZACIÓN 

Los datos suelen venir con errores. Habrás notado en la sección anterior que el tema asociado al curso "Introducción a SQL"es Julia. Tras comprobar la información sobre el curso, descubrimos el error. Hay que cambiarlo y escribir "SQL" en su lugar. Esto puede hacerse con la sentencia UPDATE, de la siguiente manera:

cur = conn.cursor()
cur.execute("UPDATE datacamp_courses SET topic = 'SQL' WHERE course_name = 'Introduction to SQL';")
conn.commit()
conn.close()

BORRAR 

Por último, puede que desee eliminar uno de los registros de la tabla. Por ejemplo, eliminemos el curso Introducción a la Estadística en R:

cur = conn.cursor()
cur.execute("""DELETE from datacamp_courses WHERE course_name = 'Introduction to Statistics in R'""");
conn.commit()
cur.close()

Consultas PostgreSQL avanzadas en Python

En la sección anterior, hemos examinado las consultas SQL más básicas. Pero hay mucho que aprender. Veamos algunas consultas más avanzadas.

ORDENAR POR

Digamos que desea ordenar su base de datos por el nombre del instructor. Puede utilizar la declaración ORDER BY:

cur = conn.cursor()

cur.execute('SELECT * FROM datacamp_courses ORDER BY course_instructor')
rows = cur.fetchall()
for row in rows:
    print(row)
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Hypothesis Testing in Python', 'James Chapman', 'Python')

GRUPO POR

Es posible que desee realizar algunas funciones agregadas dentro de diferentes grupos de datos. Por ejemplo, puede interesarle calcular el número de cursos impartidos por los distintos instructores de los cursos. Puede realizar este tipo de operaciones con la función GROUP BY.

cur = conn.cursor()
cur.execute('SELECT course_instructor, COUNT(*) FROM datacamp_courses GROUP BY course_instructor')
rows = cur.fetchall()
for row in rows:
    print(row)
('James Chapman', 2)
('Izzy Weber', 1)
('EbunOluwa Andrew', 1)

JOIN

Hasta ahora, sólo hemos trabajado con la tabla datacamp_course. Pero sólo se empieza a aprovechar todo el potencial de las bases de datos relacionales, como PostgreSQL, cuando se trabaja con varias tablas a la vez. 

La herramienta mágica para combinar varias tablas es la operación JOIN. Imaginemos que tenemos una segunda tabla en nuestra base de datos llamada programming_languages que contiene información básica sobre los principales lenguajes de programación para la ciencia de datos, incluyendo el nombre, la posición en el Índice TIOBE y el número de cursos sobre el lenguaje de programación en Datacamp. La tabla tiene este aspecto:

language_id

language_name

course_number

tiobe_ranking

1

SQL

31

8

2

Python

157

1

3

R

132

16

4

Julia

2

33

5

Scala

1

38

Imagine que desea fusionar las dos tablas para obtener la información de los cursos, junto con la posición del idioma en el índice TIOBE. Utilizaremos un INNER JOIN para obtener sólo la información de los lenguajes de programación que aparecen en la tabla datacamp_course

cur = conn.cursor()
cur.execute("""SELECT course_name, course_instructor, topic, tiobe_ranking
FROM datacamp_courses
INNER JOIN programming_languages
ON datacamp_courses.topic = programming_languages.language_name""")
rows = cur.fetchall()
for row in rows:
    print(row)
('Introduction to SQL', 'Izzy Weber', 'SQL', 8)
('Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python', 1)
('Hypothesis Testing in Python', 'James Chapman', 'Python', 1)

Éste es sólo un ejemplo, pero el potencial de los JOINS de SQL es infinito, lo que lo convierte en un tema imprescindible. Nuestro curso, tutorialy hoja de trucos sobre JOINS le ayudarán a empezar.

Primeros pasos con SQLAlchemy

Psycopg2 es una gran herramienta para conectar con bases de datos PostgreSQL. Pero, ¿qué ocurre si tienes que trabajar con bases de datos alojadas en diferentes bases de datos SQL, como Oracle y MySQL? En estos casos, puede ser mejor utilizar una herramienta que pueda conectarse a distintos tipos de bases de datos SQL. Para ello, SQLAlchemy es un gran candidato. 

En palabras sencillas, SQLAlchemy permite a los usuarios conectar bases de datos utilizando lenguaje Python, ejecutar consultas SQL mediante programación basada en objetos y agilizar el flujo de trabajo. 

Aunque la sintaxis varía en comparación con psycopg2, puede hacer prácticamente lo mismo. A continuación encontrará un ejemplo para crear un motor que se conecte con nuestro conjunto de datos datacamp_courses y lea todos los datos disponibles en la tabla datacap_course.

import sqlalchemy as db


engine = db.create_engine("postgresql://datacamp@localhost:5432/datacamp_courses")
conn = engine.connect() 
output = conn.execute("SELECT * FROM datacamp_courses")
print(output.fetchall())
conn.close()
[(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory'),
 (5, 'Hypothesis Testing in Python', 'James Chapman', 'Python'),
 (2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python'),
 (1, 'Introduction to SQL', 'Izzy Weber', 'SQL')]

SQLAlchemy es otra gran herramienta que merece la pena aprender. Para hacerse una idea de cómo funciona la herramienta, eche un vistazo a nuestro tutorial de SQLALchemy.  

Uso de PostgreSQL en DataCamp Workspace

En DataCamp trabajamos duro para que la ciencia de datos sea más fácil y accesible para todos. Esa fue la razón que impulsó la creación de DataCamp Workspace, un cuaderno de notas en la nube diseñado específicamente para la ciencia de datos. Puedes pensar en DataCamp Workspace como una mezcla entre Jupyter Notebook y Google Docs, que permite a los usuarios escribir código, analizar datos de forma individual o colectiva y compartir información.

Conectar Workspace a bases de datos PostgreSQL, así como a otras bases de datos SQL, es extremadamente fácil. Workspace le permite conectarse a fuentes de datos de forma segura, mientras puede continuar sin problemas su análisis de datos con Python o R. Sólo tiene que crear una integración, siguiendo un proceso sencillo, sin código, en el que tendrá que introducir sus credenciales de conexión. 

La siguiente imagen muestra cómo crear una integración PostgreSQL

Formulario de integración de cursos DataCamp

Por último, si desea probar la integración pero no dispone de una base de datos PostgreSQL a la que conectarse, puede utilizar una de nuestras bases de datos PostgreSQL de muestra disponibles.

¿Tiene curiosidad por saber más sobre DataCamp Workspace? Echa un vistazo a este artículo para saber más sobre este portátil de nueva generación para la ciencia de datos.

Conclusión

¡Buen trabajo! En este tutorial, te familiarizaste con PostgreSQL y aprendiste a manejar bases de datos sin salir de Python, usando el paquete psycopg2. Pero esto es sólo el principio del viaje. SQL es uno de los lenguajes de programación más utilizados en la ciencia de datos. Además, es bastante fácil de aprender, así que no tienes excusa.  

Afortunadamente, Datacamp te cubre. Aquí tienes algunos recursos que pueden ayudarte a dominar PostgreSQL y SQL en general:

Temas

Más información sobre Python

Certificación disponible

Course

Introducción a las bases de datos en Python

4 hr
94.5K
En este curso, aprenderá los conceptos básicos de las bases de datos relacionales y cómo interactuar con ellas.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

blog

20 preguntas principales de la entrevista sobre SQL Joins

Prepara tu entrevista SQL con esta lista de las preguntas más comunes sobre SQL Joins
Javier Canales Luna's photo

Javier Canales Luna

15 min

blog

Las 8 principales competencias de los analistas de negocio para 2024

Explore las principales competencias técnicas y sociales de los analistas de negocio necesarias para tener éxito y la mejor forma de mostrarlas en su cartera y en su currículum.
Joleen Bothma's photo

Joleen Bothma

11 min

blog

Las 10 principales conferencias sobre análisis de datos para 2024

Descubra las conferencias y eventos sobre analítica más populares programados para 2024.
Javier Canales Luna's photo

Javier Canales Luna

7 min

blog

Las 31 mejores preguntas y respuestas para entrevistas a analistas de negocio de todos los niveles

Explore las preguntas habituales en las entrevistas a analistas de negocio y sus respuestas para todos los niveles de experiencia.
Austin Chia's photo

Austin Chia

18 min

blog

5 formas únicas de utilizar la IA en el análisis de datos

El análisis de datos con IA está en auge entre los profesionales de los datos. Conozca en esta guía cinco formas únicas de aprovechar el poder de la IA para el análisis de datos.
Austin Chia's photo

Austin Chia

blog

Las 6 mejores certificaciones de analista de negocio: Su camino hacia la certificación

Explore las principales certificaciones de analista de negocio para mejorar su carrera. Infórmese sobre las ventajas, consejos de preparación y cómo puede ayudarle DataCamp.
Matt Crabtree's photo

Matt Crabtree

15 min

See MoreSee More