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

439
Vistas
fastapi fastapi-users con adaptador de base de datos para la tabla de usuarios de SQLModel no se crea

Estaba tratando de usar el paquete de usuarios de fastapi para agregar rápidamente un sistema de registro y autenticación a mi proyecto FastAPI que usa la base de datos PostgreSQL. Estoy usando asyncio para poder crear funciones asíncronas.

Al principio, solo usé sqlAlchemy y probé su ejemplo aquí . Y agregué esa línea de códigos a mi app/app.py para crear la base de datos al inicio del servidor. y todo funcionó a las mil maravillas. los usuarios de la tabla se crearon en mi base de datos.

 @app.on_event("startup") async def on_startup(): await create_db_and_tables()

Como estoy usando SQLModel, agregué FastAPI Users - Adaptador de base de datos para SQLModel a mis paquetes virtuales. Y agregué esas líneas a fastapi_users/db/__init__.py para poder usar la base de datos del modelo SQL.

 try: from fastapi_users_db_sqlmodel import ( # noqa: F401 SQLModelBaseOAuthAccount, SQLModelBaseUserDB, SQLModelUserDatabase, ) except ImportError: # pragma: no cover pass

También modifiqué app/users.py para usar SQLModelUserDatabase en lugar de sqlAchemy one.

 async def get_user_manager(user_db: SQLModelUserDatabase = Depends(get_user_db)): yield UserManager(user_db)

y app/dp.py para usar SQLModelUserDatabase , SQLModelBaseUserDB , aquí está el código completo de app/db.py

 import os from typing import AsyncGenerator from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker from fastapi_users.db import SQLModelUserDatabase, SQLModelBaseUserDB from sqlmodel import SQLModel from app.models import UserDB DATABASE_URL = os.environ.get("DATABASE_URL") engine = create_async_engine(DATABASE_URL) async_session_maker = sessionmaker( engine, class_=AsyncSession, expire_on_commit=False) async def create_db_and_tables(): async with engine.begin() as conn: await conn.run_sync(SQLModel.metadata.create_all) async def get_async_session() -> AsyncSession: async_session = sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) async with async_session() as session: yield session async def get_user_db(session: AsyncSession = Depends(get_async_session)): yield SQLModelUserDatabase(UserDB, session, SQLModelBaseUserDB)

Una vez que ejecuto el código, la tabla no se crea en absoluto. Me pregunto cuál podría ser el problema. No lo pude entender. ¿Alguna idea?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tuve el mismo problema, pero logré que funcionara haciendo un par de cambios.

Los cambios que necesitaba hacer (el código se basa en el ejemplo completo en la documentación):

  1. En models.py, haga que UserDB herede de SQLModelBaseUserDB, User y agregue table=True para que sqlmodel cree la tabla:
 class UserDB(SQLModelBaseUserDB, User, table=True): pass

Es importante que SQLModelBaseUserDB se herede primero, porque de lo contrario, User.id triunfa sobre SQLModelBaseUserDB.id y primary_key no puede encontrar la columna principal_clave.

  1. Use SQLModelUserDatabaseAsync en get_user_db , así (según tengo entendido, no necesita pasar SQLModelBaseUserDB en SQLModelUserDatabase. El tercer argumento es para el modelo de cuenta oauth):
 async def get_user_db(session: AsyncSession = Depends(get_async_session)): yield SQLModelUserDatabaseAsync(UserDB, session)
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