Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

696
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!