22

当我尝试使用 SQLAlchemy 将新记录插入数据库并且我没有填写所有值时,它会尝试将它们插入为“无”(而不是省略它们)。然后它抱怨“不能为空”错误。如果我在声明实例时也省略了它们,有没有办法让它只省略 sql 查询中的列?

4

3 回答 3

65

要添加到 Ali A 的答案,这意味着您需要nullable=True在列定义中具有,以便列中允许 NULL。例如:

email_address = Column(String, nullable=True)

表和列的 SQLAlchemy 文档,摘自 v1.2 文档:

nullable – 设置为 False 时,将导致在为列生成 DDL 时添加“NOT NULL”短语。当为 True 时,通常不会生成任何内容(在 SQL 中默认为“NULL”),除非在某些非常特定的后端特定边缘情况下,“NULL”可能会显式呈现。默认为 True,除非 primary_key 也为 True,在这种情况下它默认为 False。此参数仅在发出 CREATE TABLE 语句时使用。

于 2009-02-14T12:11:20.560 回答
16

这是一个数据库架构问题,而不是 SQLAlchemy 问题。如果您的数据库模式有一个不能为 NULL 的列,您必须在其中放入一些东西(即不是无)。或者更改您的架构以允许在这些列中使用 NULL。

维基百科有一篇关于 NULL的文章和一篇描述非 NULL 约束的文章

于 2009-02-14T11:26:35.193 回答
0

如果在模式中声明了默认值(但带有NOT NULL检查),您可以使用FetchedValue

from sqlalchemy.schema import FetchedValue


class Foo(Base):
    date_created = Column(DateTime, server_default=FetchedValue())
于 2021-01-04T15:12:35.897 回答