You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask模型声明含日期字段的表时触发TypeError错误求助

问题分析与解决方案

错误原因

触发TypeError的根本原因是**nullable=False参数的位置错误**:在Received_by字段中,你将nullable=False作为db.ForeignKey的参数传入,但SQLAlchemy的ForeignKey并不支持该参数,nullable是db.Column的配置选项,需放在db.Column的参数列表里。

另外,你的Received_date字段写法是正确的,db.func.today()可以正确生成日期类型的默认值,无需修改。

修正后的代码

from .database import db
from datetime import datetime

class DonationRequests(db.Model):
    __tablename__ = 'donationrequests'
    Req_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False)
    Received_date = db.Column(db.Date, default=db.func.today(), nullable=False)
    Received_from = db.Column(db.Text, db.ForeignKey('Users.username', ondelete='CASCADE'), nullable=False)
    Req_status = db.Column(db.Text, default='pending')
    # 修正:将nullable=False从ForeignKey移到Column的参数中
    Received_by = db.Column(db.Integer, db.ForeignKey('Bloodbank.bank_id', ondelete='CASCADE'), nullable=False)
    Response_date = db.Column(db.Date, nullable=True)
    rejected_msg = db.Column(db.Text, nullable=True)

关键修改说明

  • 针对Received_by字段:把原本写在db.ForeignKey括号内的nullable=False移到db.Column的参数列表中,与ForeignKey同级。
  • 保留Received_date的写法:db.func.today()会根据数据库方言生成对应的日期默认值,符合你仅存储日期的需求。

内容的提问来源于stack exchange,提问作者HS077

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:35:22