Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

699
Vistas
¿Cómo agregar imágenes a modelos (tablas) y guardarlas en la base de datos en el marco FastAPI?

Trato con FastAPI y no puedo entender cómo hacer algo simple (desde el punto de vista de mi experiencia con django): agregar un producto con una imagen a la base de datos. Tal como lo entendí, la imagen debe almacenarse en una carpeta estática y solo debe almacenarse un enlace en la base de datos. Basado en la información de la documentación oficial, he agregado este esquema

esquema.py

 from pydantic import BaseModel, HttpUrl from typing import Optional class ProductImageSchema(BaseModel): url: HttpUrl name: str class ProductSchema(BaseModel): name: str description: Optional[str] = None image: Optional[ProductImage] = None

Estoy usando SQLAlchemy. Ahora la primera pregunta que tengo es cómo describir correctamente el modelo del producto. modelos.py

 product = Product( "product", metadata, Column("id", Integer, primary_key=True), Column("name", String(50)), Column("description", String(50)), Column(....str_or_url..????) # field with relation with image, )

Y no está claro cómo crear nuevas instancias del objeto del producto. Algo como...

crud.py

 async def post(payload: ProductSchema, file: UploadFile = File(...)): content = await file.read() if file.content_type not in ['image/jpeg', 'image/png']: raise HTTPException(status_code=406, detail="Only .jpeg or .png files allowed") file_name = f'{uuid.uuid4().hex}{ext}' async with aiofiles.open(file_name, "wb") as f: await f.write(content) query = product.insert().values(title=payload.name, description=payload.description, image=????????) return await database.execute(query=query)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su enfoque es correcto. Hasta donde yo sé, las imágenes, así como los archivos de otros usuarios, se almacenan en una carpeta estática (o lo que sea) y se mantiene una referencia en la base de datos. En algunos casos, el nombre del archivo (posiblemente con la extensión) se almacena en la tabla, mientras que en otros casos, especialmente en una aplicación más distribuida, se almacena la URL completa.

Su archivo crud.py parece ser correcto. Simplemente cambie el parámetro de image en la consulta a la URL o al nombre de archivo que usó. Asegúrese de verificar que ningún otro usuario haya insertado un archivo con el mismo nombre (y extensión), ¡o sobrescribirá los archivos de su usuario!

Volviendo a tus preguntas,

Mejoraría aún más ProductImageSchema en el archivo schema.py con lo siguiente

 from datetime import datetime class ProductImageSchema(BaseModel): url: HttpUrl name: str type: str creation_date: datetime.datetime = datetime.now()

Como no ha especificado el modelo de datos (es decir, la estructura de la base de datos), solo puedo inferir de lo que ha escrito. Si mi inferencia es correcta, un producto puede tener varias imágenes, por lo que necesitará una tabla para el producto y otra para las imágenes. Supongo que las imágenes no se comparten entre productos; de lo contrario, necesitará 3 tablas.

Aunque el fragmento de código no se parece mucho al código válido de SQLAlchemy, este es un ejemplo de lo que podría hacer

 product = Product( "product", metadata, Column("id", Integer, primary_key=True), Column("name", String(50)), Column("description", String(50)) ) images = Image( "image", metadata, Column("product", Integer, ForeignKey(Product.id), primary_key=True,), Column("name", String(50), primary_key=True), Column("filetype", String(50)) )

Pero no estoy seguro de que este sea un código SQLAlchemy válido, ya que lo que publicaste tampoco se ve bien. De todos modos, espero que sea suficiente para hacerse una idea.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda