当我尝试使用SQLAlchemy将新记录插入数据库并且我没有填写所有值时,它会尝试将它们插入为"无"(而不是省略它们).然后它抱怨"不能为空"错误.有没有办法让它只是省略sql查询中的列,如果我在声明实例时也省略了它们?
要添加到Ali A的答案,这意味着您需要nullable=True
在列定义中,以便在列中允许NULL.例如:
email_address = Column(String, nullable=True)
表和列的SQLAlchemy文档,摘自v1.2 doc:
nullable - 设置为False时,将在为列生成DDL时添加"NOT NULL"短语.当为True时,通常不会生成任何内容(在SQL中默认为"NULL"),除非在某些非常特定的后端特定边缘情况下,"NULL"可以显式呈现.默认为True,除非primary_key也为True,在这种情况下默认为False.此参数仅在颁发CREATE TABLE语句时使用.
这是数据库架构问题,而不是SQLAlchemy问题.如果您的数据库模式具有不能为NULL的列,则必须将某些内容(即非None)放入其中.或者更改您的架构以在这些列中允许NULL.
维基百科有一篇关于NULL的文章和一篇描述非NULL约束的文章