Introducción a FastAPI

1

¿Qué es FastAPI? con Sebastián Ramírez @Tiangolo

2

Instalación de FastAPI y creación de tu primera aplicación

3

Documentación automática con Swagger

4

Métodos HTTP en FastAPI

FastAPI Path Operations

5

Método GET en FastAPI

6

Crear parámetros de ruta en FastAPI

7

Parámetros Query en FastAPI

8

Método POST en FastAPI

9

Métodos PUT y DELETE en FastAPI

Validaciones con Pydantic

10

Creación de esquemas con Pydantic

11

Validaciones de tipos de datos con Pydantic

12

Validaciones de parámetros con Pydantic

13

JSONResponse: Tipos de respuestas en FastAPI

14

Códigos de estado HTTP en FastAPI

Autenticación en FastAPI

15

Flujo de autenticación en FastAPI

16

Generando tokens con PyJWT

17

Validando tokens con PyJWT

18

Middlewares de autenticación en FastAPI

Conexión con bases de datos en FastAPI

19

SQLAlchemy: el ORM de FastAPI

20

Instalación y configuración de SQLAlchemy

21

Creación de modelos con SQLAlchemy

22

Registro de datos con SQLAlchemy

23

Consulta de datos con SQLAlchemy

24

Modificación y eliminación de datos con SQLAlchemy

25

SQLModel: el futuro ORM de FastAPI

Modularización

26

Manejo de errores y middlewares en FastAPI

27

Creación de routers en FastAPI

28

Servicios para consultar datos

29

Servicios para registrar y modificar datos

Despliegue de Aplicación en FastAPI

30

Preparando el proyecto para desplegar a producción

31

¿Cómo elegir entre GitHub y GitLab?

32

Crear repositorio en GitLab

33

Crear Droplet en Digital Ocean

34

Instalación de herramientas para el servidor

35

Ejecutando FastAPI con NGINX

Próximos pasos

36

¿Quieres más cursos de FastAPI?

Bonus

37

Cómo crear una API de alto rendimiento en tiempo récord - Sebastián Ramírez

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de FastAPI

Curso de FastAPI

Pablo España

Pablo España

Instalación y configuración de SQLAlchemy

20/37
Recursos

Aportes 19

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

No quiero ser pesado, pero en esta clase no he aprendido nada, solo he visto a una persona escribiendo codigo sin explicar nada de lo que esta escribiendo, hubiese sido lo mismo que digas: "Copien este codigo y ponganlo aqui" No entendi nada porque no explicaste, si estoy pagando platzi es para que me expliquen bien y no molestarme en ir a leer la documentacion o escribir el codigo a chatgp y decirle que me lo explique detalladamente linea a linea. Como persona me caes bien, pero como profesor deberias mejorar.
Esta clase quizás está un poco diferente al resto, por si alguien tiene dudas de lo que se realizó (para repasar) 1. `base_dir` (será nuestra url del archivo de sqlite). 2. `database_url` une un string adicional con lo que declarameos de la ruta y nombre del archivo 3. `engine` crea una instancia del resultado de lo que devuelve la funcion create\_engine(). 4. `Session` guarda la session creada a partir del engine. 5. `Base` se ha declarado pero su uso será explicado más adelante.

Ahora el sessionmaker se encuentra en:

from sqlalchemy.orm import sessionmaker
Creo que este curso podría tener muchisisisisisisisisisisisisisisimas mejoras, si bien abarcan bien la introducción a lo que es fastapi, les falta artisimo para que puedan incluir el despliegue, un ejemplo de este es ¿como usar docker con FastAPI?, explicar mucho mejor sobre DEPENDS, ¿Como se puede usar redis y postgresql en FastAPI?, ¿Como se hace la subida de archivos?, ¿Como usar librerias de ciencia de datos tipo pandas con fastapi?, ¿Buenas practicas, clean code y arquitecturas con FastAPI?, etc
Chicos de pronto a alguien esté interesado, esta es la manera de conectar a una base de datos (En mi caso es MySQL, pero es el mismo proceso para PostgreSQL o otra DB) ![](https://static.platzi.com/media/user_upload/image-2208f296-15fe-4533-92e3-074194471aa6.jpg) ![]()
En esta clase hay dos typos que parecen poco importantes pero que si lo son. Fijate como `session` y `base` se definen con una letra mayuscula (Session y Base respectivamente), el problema con ello es que eso luego nos puede hacer pensar que estamos importando o heredando clases cuando en realidad se trata de una variable o una instancia. Repito, parece no tener importancia pero siempre es buena idea saber al detalle que estamos usando, por eso existen las convenciones al escribir código Python!
Edwin David Guerrero Oviedo Estudiante•hace unos segundos Hola hace unos días termine el curso: fue fantastico ya tengo un api desplegada para un proyecto que tenia en mente con postgresql, para conectarlo solo fue sufiente con cambiar la linea database\_url Me volví a esta clase para dejar un aporte: lchost = "127.0.0.1" lcbd = "fastapi" lcport = "5432" lcuser = "postgres" lcpwd = "postgres" database\_url = "postgresql://$lcuser:$lcpwd@$lchost:$lcport/$lcbd" engine = create\_engine(database\_url) sesion =sessionmaker(bind=engine,autoflush=False) Base = declarative\_base() Muchas gracias
Sin ser pesado amigo, se nota que sabes demasiado, pero sin embargo es un poquito complejo fastapi y mas si falta explicar el porque haces lo que haces.
Esta configuración en Python utiliza SQLAlchemy, una popular biblioteca de mapeo objeto-relacional (ORM) para interactuar con bases de datos relacionales. Aquí está el detalle de cada parte: 1. **Importaciones de módulos**```js import os from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base ``` * `os`: Este módulo proporciona funciones para interactuar con el sistema operativo, que se utiliza aquí para manejar rutas de archivos. * `create_engine`: Esta función de SQLAlchemy se utiliza para crear un motor de base de datos, que es responsable de la comunicación con la base de datos. * `sessionmaker`: Es una función que crea una fábrica de sesiones. Las sesiones son objetos que mantienen la "conversación" entre Python y la base de datos. * `declarative_base`: Se utiliza para crear una clase base para todas las clases de modelo definidas. Es una clase especial que permite definir clases de modelo que se pueden mapear a tablas en la base de datos. 2. **Configuración de la base de datos**:```python sqlite_file_name = "database.sqlite" base_dir = os.path.dirname(os.path.realpath(__file__)) database_url = f"sqlite:///{os.path.join(base_dir, sqlite_file_name)}" ``` * `sqlite_file_name`: Nombre del archivo de la base de datos SQLite. * `base_dir`: Directorio base donde se encuentra el archivo de script Python actual. * `database_url`: URL de conexión a la base de datos. En este caso, una URL de conexión SQLite que apunta al archivo SQLite en el directorio base. 3. **Creación del motor de la base de datos**: ```js engine = create_engine(database_url, echo=True) ``` * `engine`: Es un objeto que representa el motor de la base de datos. Se utiliza para enviar comandos SQL a la base de datos. 4. **Creación de la fábrica de sesiones**:```js Session = sessionmaker(bind=engine) ``` * `Session`: Es una clase que se utiliza para instanciar sesiones. Cuando necesitas interactuar con la base de datos, creas una sesión utilizando esta clase. 5. **Creación de la clase base del modelo**:```js Base = declarative_base() ``` * `Base`: Es una clase base para todas las clases de modelo. Cualquier clase de modelo que se defina posteriormente debe heredar de esta clase.
import osfrom sqlalchemy import create\_enginefrom sqlalchemy.orm.session import sessionmaker from sqlalchemy.ext.declarative import declarative\_base sqlite\_file\_name="db\_sqllite"base\_dir = os.path.dirname(os.path.realpath(\_\_file\_\_)) datbase\_url = f"sqlite:///{os.path.join(base\_dir, sqlite\_file\_name)}" engine = create\_engine(datbase\_url, echo=True) Session = sessionmaker(bind=engine) Base = declarative\_base
mas que un curso es una serie de pasos para configurar la base de datos. en caso que no tengan background con otro lenguaje esta muy complejo dado que omite comentar muchos detalles del porque tiene que hacer cada uno de los pasos y para complicarla un poco mas esta es solo una configuración básica...
Recordemos que es un curso nivel intermedio donde los conceptos básicos se adquieren en otros cursos, incluso en otros lenguajes.
```python import os from sqlalchemy import create_engine from sqlalchemy.orm.session import sessionmaker from sqlalchemy.ext.declarative import declarative_base # Nombre del archivo SQLite que se utilizará como base de datos sqlite_file_name = "database.sqlite" # Obtiene el directorio base donde se encuentra el archivo actual base_dir = os.path.dirname(os.path.realpath(__file__)) # Construye la URL de la base de datos SQLite # La URL tiene el formato 'sqlite:///ruta/al/archivo/database.sqlite' database_url = f"sqlite:///{os.path.join(base_dir, sqlite_file_name)}" # Crea una instancia del motor de base de datos # 'echo=True' activa el registro de todas las declaraciones SQL ejecutadas, útil para depuración engine = create_engine(database_url, echo=True) # Crea una fábrica de sesiones configurada con el motor de la base de datos Session = sessionmaker(bind=engine) # Crea una clase base para las declaraciones de clases # Las clases de modelo ORM se derivarán de esta clase base Base = declarative_base() ```import os from sqlalchemy import create\_engine from sqlalchemy.orm.session import sessionmaker from sqlalchemy.ext.declarative import declarative\_base \# Nombre del archivo SQLite que se utilizará como base de datos sqlite\_file\_name = "database.sqlite" \# Obtiene el directorio base donde se encuentra el archivo actual base\_dir = os.path.dirname(os.path.realpath(\_\_file\_\_)) \# Construye la URL de la base de datos SQLite \# La URL tiene el formato 'sqlite:///ruta/al/archivo/database.sqlite' database\_url = f"sqlite:///{os.path.join(base\_dir, sqlite\_file\_name)}" \# Crea una instancia del motor de base de datos \# 'echo=True' activa el registro de todas las declaraciones SQL ejecutadas, útil para depuración engine = create\_engine(database\_url, echo=True) \# Crea una fábrica de sesiones configurada con el motor de la base de datos Session = sessionmaker(bind=engine) \# Crea una clase base para las declaraciones de clases \# Las clases de modelo ORM se derivarán de esta clase base Base = declarative\_base()
Menuda estafa de curso pese a que si es intermedio que, que con unos años y un manejo de otra API esto se entienden, de todas maneras te estafan la ruta de desarrollador experto de python este es el que sigue después de fundamentos(cursos que si explicaban todo almenos), entonces esto si debe aunque sea guiar a la gente nueva. Otro curso de FastAPI o ultima vez que pago esto, una documentación gratuita te enseña más.
Menuda estafa de curso pese a que si es intermedio que, que con unos años y un manejo de otra API esto se entienden, de todas maneras te estafan la ruta de desarrollador experto de python este es el que sigue después de fundamentos(cursos que si explicaban todo almenos), entonces esto si debe aunque sea guiar a la gente nueva
Hola hace unos días termine el curso: fue fantastico ya tengo un api desplegada para un proyecto que tenia en mente. Me volví a esta clase para dejar un aporte: lchost   =  "127.0.0.1" lcbd     =  "fastapi" lcport   =  "5432" lcuser   =  "postgres" lcpwd    =  "postgres" database\_url = "postgresql://$lcuser:$lcpwd@$lchost:$lcport/$lcbd" engine = create\_engine(database\_url) sesion =sessionmaker(bind=engine,autoflush=False) Base = declarative\_base() Muchas gracias

módulo os en Python. El módulo os proporciona una interfaz para interactuar con el sistema operativo en el que se está ejecutando Python. Proporciona funciones para realizar operaciones como manipulación de archivos, navegación de directorios, entre otras.

Esta clase es "de manual" donde no explica, solo dice "haz esto". Para mejorar la situación hice un userscript para descargar los subtitulos (Encontralo buscando en GreasyFork!) y lo hice pasar por ChatGPT. Estas son las notas que generó y yo corregí: \*\*Instalación de Extensiones:\*\* \- Se instala una en VSCode extensión llamada `SQLite Viewer` para visualizar los datos de la base de datos SQLite. \*\*Instalación de SQL Alchemy:\*\* \- Se instala el módulo SQL Alchemy mediante el comando `pip install SQLAlchemy`. ``` pip install sqlalchemy ``` \*\*Configuración de Conexión a la Base de Datos:\*\* \- Se crea una carpeta llamada `config` con un archivo `\_\_init\_\_.py` para reconocerla como un módulo. \- Se crea un archivo `database.py` dentro de la carpeta config para añadir las configuraciones. \- Se define una variable llamada `sql\_file\_name` con el nombre de la base de datos (`database.sqlite`). \- Se crea una variable llamada `base\_dir` que utiliza el módulo `os` para obtener el directorio actual del archivo `database.py`. \- Se crea la URL de la base de datos utilizando el formato de conexión a SQLite y el directorio actual del archivo. \*\*Creación del Motor y la Sesión de la Base de Datos:\*\* \- Se importa la función `create\_engine` de SQLAlchemy para crear un motor de base de datos. \- Se crea una variable llamada `engine` que representa el motor, utilizando la URL de la base de datos y habilitando la opción `echo` para mostrar el código por consola. \- Se importa la función `sessionmaker` de SQLAlchemy para crear una sesión de base de datos. \- Se crea una variable llamada `session` que utiliza `session maker` enlazada al motor de la base de datos. \*\*Importación de Declarative Base:\*\* \- Se importa la función `declarative base` de `sqlalchemy.ext.declarative` para manipular las tablas de la base de datos. \- Se crea una variable llamada `base` que es una instancia de `declarative\_base` para el manejo futuro de las tablas.
# **Instalación y configuración de SQLAlchemy** * En las extensiones de `VScode` buscar `SQLite Viewer` e instalarlo. * También instalar el modulo de `sqalchemy` desde la terminal ```python pip install sqlalchemy ``` * Crear la carpeta `config` * Dentro de dicha carpeta crear el archivo `__init__.py` para que detecte la carpeta como un modulo. * Crear otro archivo llamado `database.py` donde añadiremos las configuraciones. ```python import os from sqlalchemy import create_engine from sqlalchemy.orm.session import sessionmaker from sqlalchemy.ext.declarative import declarative_base sqlite_file_name = "database.sqlite" base_dir = os.path.dirname(os.path.realpath(__file__)) database_url = f"sqlite:///{os.path.join(base_dir, sqlite_file_name)}" engine = create_engine(database_url, echo=True) Session = sessionmaker(bind=engine) Base = declarative_base() ```