Flask SQLAlchemy 没有创建我模型的所有列

Flask SQLAlchemy does not create all the columns of my model

我正在使用 flask 和 flask SQLAlchemy 创建我的 sqllite 数据库,该数据库有一个 table 和多个列。我已经创建了我的模型,但是一旦我 运行 应用程序它只会创建前 03 列 ?!!!

...

db = SQLAlchemy()

def setup_db(app):
    db.app = app
    db.init_app(app)

def db_drop_and_create_all():
    db.drop_all()
    db.create_all()

...

@dataclass
class ChurnModel(inheritedModels):
    id = int
    customerID = String
    gender = String
    SeniorCitizen: int
    Partner: String
    ...

    __tablename__ = 'churn'

    id = Column(Integer().with_variant(Integer, "sqlite"), primary_key=True)
    customerID = Column(String(255), nullable=False)
    gender = Column(String(255))
    SeniorCitizen: Column(Integer())
    Partner: Column(String(255))
    ...

    def get_churn(self):
        return {
            "id": self.id,
            "customerID": self.customerID,
            "gender": self.gender,
            "SeniorCitizen": self.SeniorCitizen,
            "Partner": self.Partner,
            ...
        }

    ...

这是我在 database.db 文件中发现的,周围有很多空值:


TE TABLE churn (
    id INTEGER NOT NULL, 
    "customerID" VARCHAR(255) NOT NULL, 
    gender VARCHAR(255), 
    PRIMARY KEY (id)
)

有什么解释吗?!

查看代码后,我认为这是预期的行为,因为您定义的列只有 idcustomerIDgender。 也许你只是对如何使用类型提示感到困惑,或者你没有注意它,仅此而已。

试试这个:

@dataclass
class ChurnModel(inheritedModels):
    id: int
    customerID: str
    gender: str
    SeniorCitizen: int
    Partner: str
    ...

    __tablename__ = 'churn'

    id = Column(Integer().with_variant(Integer, "sqlite"), primary_key=True)
    customerID = Column(String(255), nullable=False)
    gender = Column(String(255))
    SeniorCitizen= Column(Integer())
    Partner= Column(String(255))
    ...