如何在SQLAlchemy中插入NULL值?

时间:2015-10-05 23:15:40

标签: python sqlalchemy

我有一个Table,其中包含以下列:

Column('type', String(128))

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

我试过这样做:

self.type = NULL;

Python中没有NULL类型,因此我不知道该怎么做。

3 个答案:

答案 0 :(得分:25)

而不是尝试

self.type = NULL

尝试Yaroslav Admin suggested

self.type = None

因为Python与NULL的等价物是无。

答案 1 :(得分:7)

我知道这是一个老线程,但这对我有用

self.type = sqlalchemy.sql.null()

答案 2 :(得分:4)

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

  

SQL NULL值由输入和输出上的Python None单例表示。

作为第三个选项,如果可以为空,则可以简单地省略该列:

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

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

将有效地在表(1, NULL)中插入新行t,因为未为列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)