Python& SQLalchemy(ORM):如何将`None`映射到特殊值(如Zero)或空字符串(对于`NOTNULL`列)将它们设置为UNIQUE

时间:2015-03-27 11:03:34

标签: python orm sqlalchemy nullable

假设您要制作一个或多个comuns UNIQUE或想制作INDEX。如果所有列都设置为NOTNULL == True,这仅适用于MySQL(也可能在其他数据库中,我不知道)。但Colums必须是可以为空的。从我读到的内容中你应该得到一个特殊值,它将代表NULL。 特殊值可以是0(零)或""(空字符串)。当然,这个值不允许作为标准分配(不再有列中0""的代表)

如果我使用像SQLalchemy这样的ORM在python中访问我的数据库,那么在从DB读取特殊值特殊值时将特殊值转换为None会更方便如果您将列设置为None,则为

实际我认为最好的解决方案是使用这样的getter和setter:

Base = declarative_base()

class NotNullClass(Base):

    __tablename__ = 'notnull_class'

    id = Column(INTEGER , primary_key=True)
    _column1 = Column('column1', INTEGER, nullable=False, unique=True)

    @hybrid_property
    def column1(self):
        if (_column1 == 0):
            return None
        else
            return _column1

    @column1.setter
    def column1(self, value):
        if (value == 0):
            raise Exception
        elif (value == None)
            _column1 = 0
        else
            _column1 = value

但是有没有更好的解决方案,比如SQLalchemy中的内置属性?或者还有其他最佳做法吗?

0 个答案:

没有答案