SQLAlchemy和空列

rye*_*guy 16 python database-design sqlalchemy

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

Van*_*ale 50

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

email_address = Column(String, nullable=True)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这更直接地回答了这个问题 (8认同)

Ali*_*har 15

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

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

  • 同意不同意,我目前遇到与问题完全相同的问题:该列被定义为“timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP”。添加的对象尚未设置此属性,但 SQLAlchemy 仍尝试插入“NULL”值 (2认同)