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