Why isn't SQLAlchemy default column value available before object is committed?

后端 未结 3 1094
隐瞒了意图╮
隐瞒了意图╮ 2020-12-05 04:35

Recently I figured out that SQLAlchemy\'s Column default doesn\'t work as I expect it to:

>>> Base = declarative_base()
>>> class TestModel         


        
3条回答
  •  悲&欢浪女
    2020-12-05 05:24

    You can use the init event to fill defaults. This event listener will do it:

    from sqlalchemy import event
    from sqlalchemy.orm import mapper
    from sqlalchemy.inspection import inspect
    
    
    def instant_defaults_listener(target, args, kwargs):
        for key, column in inspect(target.__class__).columns.items():
            if column.default is not None:
                if callable(column.default.arg):
                    setattr(target, key, column.default.arg(target))
                else:
                    setattr(target, key, column.default.arg)
    
    
    event.listen(mapper, 'init', instant_defaults_listener)
    

提交回复
热议问题