我有一个Table
,其中包含以下列:
Column('type', String(128))
在数据库中插入新行时,如何将此列设置为NULL?
我试过这样做:
self.type = NULL;
Python中没有NULL
类型,因此我不知道该怎么做。
答案 0 :(得分:25)
答案 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)
。