SQLAlchemy和空列

时间:2009-02-14 11:14:06

标签: python database-design sqlalchemy

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

3 个答案:

答案 0 :(得分:46)

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

email_address = Column(String, nullable=True)

SQLAlchemy docs for Tables and Columns,摘自v1.2 doc:

  

nullable - 设置为False时,将导致“NOT NULL”短语   在为列生成DDL时添加。当为True时,通常会   什么都不生成(在SQL中默认为“NULL”),除非在某些情况下   特定的后端特定边缘情况,其中“NULL”可以呈现   明确。默认为True,除非primary_key也为True,其中   case默认为False。此参数仅在发布时使用   CREATE TABLE语句。

答案 1 :(得分:14)

这是数据库架构问题,而不是SQLAlchemy问题。如果您的数据库模式具有不能为NULL的列,则必须将某些内容(即非None)放入其中。或者更改您的架构以在这些列中允许NULL。

维基百科有一篇文章about NULL和一篇描述non-NULL constraints

的文章

答案 2 :(得分:0)

如果在架构中声明了默认值(但使用 NOT NULL 检查),您可以使用 FetchedValue 声明它们

from sqlalchemy.schema import FetchedValue


class Foo(Base):
    date_created = Column(DateTime, server_default=FetchedValue())