在SQLAlchemy中如何设置插入时默认值为NULL或空字符串?
关于SQLAlchemy列默认值的问题解答
让我一步步给你理清楚这个问题哈:
首先得明确一个核心冲突:你原来的列定义里nullable=False,意味着这个数据库字段绝对不允许存储NULL值,所以你想默认填NULL的话,必须先修改这个参数,否则会和数据库的约束冲突,直接报错。
接下来分两种情况给你建议:
优先推荐:未传值时默认填空字符串
如果你的核心需求是没传值就用空字符串,同时保持字段非空,那正确的列定义应该是这样:
name = Column(String(32), nullable=False, default='')
这样设置后,当插入数据时如果没有给name传值,SQLAlchemy会自动把空字符串''填充进去,而且因为nullable=False,数据库会严格拒绝任何NULL值写入,完全符合你的预期。
退而求其次:默认填NULL(需修改非空约束)
如果实在没办法用空字符串,必须默认NULL,那你必须把nullable=False改成nullable=True(允许字段存NULL),同时注意Python里没有NULL,要用None来对应数据库的NULL值,定义如下:
name = Column(String(32), nullable=True, default=None)
这里要提醒你,改成nullable=True后,这个字段就允许存储NULL了,业务上要确认是否接受这种情况。
纠正你原来的错误尝试
你之前想写的default=NULL是不对的:
- Python中没有
NULL这个关键字,对应数据库NULL的是None - 如果保留
nullable=False,设置default=None会触发数据库约束错误,因为非空字段不能存NULL
内容的提问来源于stack exchange,提问作者sshussain270
相关产品推荐
相关产品推荐

