Soy nuevo en fastapi y SQLModel, estaba tratando de implementar un código básico de mi lib existente, tengo una clase de dirección
me gusta
@dataclass class Address(DataClassJsonMixin): addr1: str city: str province: strSimplemente quiero crear una clase en SQLModel que se conecte a DB. Solo he agregado una nueva ID de columna aquí. Recibo el siguiente error donde no estoy seguro de por qué solicita un atributo de configuración.
class AddressMaster(SQLModel, Address): id: int = Field(default=None, primary_key=True) AttributeError: type object 'Address' has no attribute '__config__' Está fallando en config = getattr(base, "__config__") que tiene información que no puedo comprender.
# Only one of the base classes (or the current one) should be a table model # this allows FastAPI cloning a SQLModel for the response_model without # trying to create a new SQLAlchemy, for a new table, with the same name, that # triggers an error from sqlmodel import SQLModel, Field from ...core import Address from dataclasses import dataclass @dataclass class AddressDB(Address, SQLModel): pass # END AddressDB class AddressMaster(AddressDB, table=True): """ Address Master Table """ id: int = Field(default=None, primary_key=True) # END AddressMasterCreación de objetos
objAd = AddressMaster.from_dict({"addr1": "Kashmir", "city": "Srinagar", "province": "Kashmir"})Hay un error en la semántica de su clase AdressMaster . Si está destinado a ser una clase relacionada con su base de datos. Luego, debe especificar en el primer parámetro la clase que hereda de un modelo SQL o de SQLmodel (y en este caso, debe volver a escribir cada atributo de su modelo dentro de esta clase) directamente. Y hay que pasarle el argumento table=True
class AddressMaster(Address, table=True): id: int = Field(default=None, primary_key=True) # Here the attributes will be inherited from your Adress class # (provided that this one in its parentage is an inheritance link with a modelSQL)O
class AddressMaster(SQLModel, table=True): id: int = Field(default=None, primary_key=True) addr1: str city: str province: str # Here, the class is independent from the other pydantic # validation models since it inherits directly from SQLModel En Try 1: está tratando de pasar dos parámetros a su clase AddressDB , uno de los cuales es un SQLModel . Sin embargo, SQLModel permite anular SQLAlchemy y acepta como parámetro solo modelos de SQLAlchemy o Pydantic. Durante la inicialización, pasa por los argumentos pasados en el parámetro e intenta llamar al método o atributo Config que existe en los modelos pydantic y SQLAlchemy. Esta es la fuente de su error ya que pasa en el parámetro un DataClassJsonMixin que no tiene ningún método o atributo de Config . Este es el origen de tu error.
Cómo resolverlo. Solo tiene que no llamar a DataClassJsonMixin , que me parece codificar/decodificar datos JSON. Sin embargo, este es un comportamiento básico de Pydantic (que se usa detrás de SQLModel).
Entonces, si usa el primer método que se muestra arriba (es decir, heredado de un SQLModel), solo tiene que colocar sus campos de validación dentro AddressDB y hacer que esta clase herede solo de SQLModel
class AddressDB(SQLModel): addr1: str city: str province: str