当我使用SQLAlchemy插入新纪录到数据库时,如果没有填写所有字段,它会将它们都插入为“None”(而不是省略它们)。然后会出现“不能为空”的错误。是否有一种方法,使其在声明实例时也省略掉这些字段,从而在SQL查询中省略掉这些列?
当我使用SQLAlchemy插入新纪录到数据库时,如果没有填写所有字段,它会将它们都插入为“None”(而不是省略它们)。然后会出现“不能为空”的错误。是否有一种方法,使其在声明实例时也省略掉这些字段,从而在SQL查询中省略掉这些列?
补充Ali A的回答,这意味着您需要在列定义中添加nullable=True
,以便该列允许NULL值。例如:
email_address = Column(String, nullable=True)
SQLAlchemy Tables 和 Columns 文档,摘自 v1.2 版本:
nullable – 当设置为 False 时,在生成列的 DDL 时将会添加“NOT NULL”短语。当设置为 True 时,通常不会生成任何内容(在 SQL 中默认为“NULL”),除非在某些特定的后端特殊情况下,“NULL”可能显式呈现。默认为 True,除非 primary_key 也是 True,这种情况下它默认为 False。此参数仅用于发出 CREATE TABLE 语句。
如果默认值在模式中已经声明(但带有NOT NULL
检查),您可以使用FetchedValue
声明它们。
from sqlalchemy.schema import FetchedValue
class Foo(Base):
date_created = Column(DateTime, server_default=FetchedValue())
nullable=True
设置了,但是出现了IntegrityError错误。显示存在NOT NULL约束。 - Morgan Sell