首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlModel : Fastapi AttributeError: type object 'AddressBaseCore‘没有属性__config__

SqlModel : Fastapi AttributeError: type object 'AddressBaseCore‘没有属性__config__
EN

Stack Overflow用户
提问于 2022-01-23 12:31:48
回答 1查看 1.1K关注 0票数 0

我刚开始使用SQLModel,我试图从我现有的库中实现一些基本代码,我有一个Address类

喜欢

代码语言:javascript
复制
@dataclass
class Address(DataClassJsonMixin):
    addr1: str
    city: str
    province: str

我只想在SQLModel中创建一个连接到DB的类。我只在这里添加了一个新的列ID。下面是错误,我不知道为什么它会要求一个config属性。

代码语言:javascript
复制
class AddressMaster(SQLModel, Address):
    id: int = Field(default=None, primary_key=True)


AttributeError: type object 'Address' has no attribute '__config__'

config = getattr(base, "__config__")上有一些我无法提供的信息是失败的。

代码语言:javascript
复制
# 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

尝试1:

代码语言:javascript
复制
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 AddressMaster

对象创建

代码语言:javascript
复制
objAd = AddressMaster.from_dict({"addr1": "Kashmir", "city": "Srinagar", "province": "Kashmir"})
EN

回答 1

Stack Overflow用户

发布于 2022-01-23 17:03:41

AdressMaster类的语义出现了错误。如果它是一个与您的DB相关的类。然后,您必须在第一个参数中指定从SQL模型继承的类或从SQLmodel继承的类(在本例中,应该直接重写该类中模型的每个属性)。有必要将参数table=True传递给它

代码语言:javascript
复制
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)

代码语言:javascript
复制
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

在Try 1中:您试图向您的AddressDB类传递两个参数,其中一个是SQLModel。然而,SQLModel允许重写SQLAlchemy,并且只接受来自SQLAlchemy或Pydantic的参数模型。在初始化过程中,它会遍历参数中传递的参数,并尝试调用存在于pydantic和SQLAlchemy模型中的方法或属性SQLAlchemy。这是错误的来源,因为您传入参数DataClassJsonMixin,它没有Config方法或属性。这是你错误的根源。

如何解决这个问题。您只需不调用DataClassJsonMixin,在我看来,它似乎是编码/解码JSON数据的。然而,这是Pydantic (在SQLModel后面使用)的一个基本行为。

因此,如果使用上面所示的第一个方法(即从SQLModel继承的方法),只需将验证字段放在AddressDB中,并使该类仅从SQLModel继承

代码语言:javascript
复制
class AddressDB(SQLModel):
    addr1: str
    city: str
    province: str
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70822063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档