Flask SQLAlchemy创建数据库时未生成模型全部列问题咨询
问题原因
你定义模型字段时混淆了Python变量赋值语法和类型注解语法,SQLAlchemy仅会将被赋值为Column实例的类属性识别为数据库表字段:
- 前三个字段
id、customerID、gender使用的是赋值符号=,属于有效字段定义,被正常识别 - 后续的
SeniorCitizen、Partner等字段使用的是冒号:,属于Python类型注解语法,SQLAlchemy不会将这类注解识别为表字段,因此建表时不会生成对应列
解决方法
把所有SQLAlchemy字段定义的冒号:替换为赋值符号=即可,如果你用了dataclass需要保留类型注解,可以单独写在属性声明区域,修正后的模型参考:
@dataclass class ChurnModel(inheritedModels): # dataclass 类型注解区域,不影响SQLAlchemy字段识别 id: int customerID: str gender: str SeniorCitizen: int Partner: str ... __tablename__ = 'churn' # SQLAlchemy 字段定义区域,全部用赋值符号= 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)) ...
修改完成后重新运行db_drop_and_create_all()重建表,就会生成所有定义的字段。
内容的提问来源于stack exchange,提问作者DINA TAKLIT
相关产品推荐
相关产品推荐

