如何在SQLAlchemy中插入空值?

2024-05-23 18:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Table包含以下列:

Column('type', String(128))

在数据库中插入新行时,如何将此列设置为空?

我试过这样做:

self.type = NULL;

Python中没有NULL类型,所以我不知道如何做。


Tags: self数据库类型stringtypetablecolumnnull
3条回答

正如其他答案所指出的,显式NULL可以通过传递None插入,或者在SQLAlchemy a^{}构造的情况下,作为值插入。实际上,PEP-249“DB-API v2.0”在"Type Objects and Constructors"中清楚地说明了这一点:

SQL NULL values are represented by the Python None singleton on input and output.

作为第三个选项,如果列可以为空,则可以省略它:

t = Table('t', metadata,
          Column('a', Integer),
          Column('b', Integer))

stmt = t.insert().values(a=1)
engine.execute(stmt)

将有效地在表t中插入新行(1, NULL),因为没有为列b提供值。同样的情况也适用于映射类,我想最初的问题实际上是在使用它(因为self):

class T(Base):
    __tablename__ = 't'
    id = Column(Integer, primary_key=True)
    a = Column(Integer)
    b = Column(Integer)

session.add(T(a=1))
session.commit()

再次有效地导致(default, 1, NULL)被插入。

而不是尝试

self.type = NULL

Yaroslav Admin suggested身份尝试

self.type = None

因为Python的NULL等价物是None。

我知道这是条老线索,但这对我有用

self.type = sqlalchemy.sql.null()

相关问题 更多 >