当 SqlAlchemy 中的列上有默认设置时,将列的值显式设置为 NULL

Ale*_*lex 3 python sqlalchemy

我有一个表定义如下:

class Thing(Base):
    __tablename__ = "things"

    my_field = Column(Text, nullable=True, default=lambda c: "default")
Run Code Online (Sandbox Code Playgroud)

(在我的实际实现中,默认函数更复杂,但我认为说我正在使用函数来生成默认值是相关的。)

我希望在某些情况下能够显式设置my_fieldto的值NULL。我努力了:

thing = Thing(my_field=None)
Run Code Online (Sandbox Code Playgroud)

Session.add(thing); Session.commit()默认值是由函数生成的,并覆盖我的显式None. 有没有办法一般使用默认值,但偶尔会为列显式设置 Null ?

ben*_*nvc 6

这是由于 SQLAlchemy ORM 中的一个怪癖造成的。即使您在具有默认值的列上显式设置值None,也会将其视为未设置值。您需要使用nullSQL 构造来解决此问题。有关更多详细信息,请参阅在具有默认值的列上强制 NULL 。

from sqlalchemy import null

thing = Thing(my_field=null())
Run Code Online (Sandbox Code Playgroud)