Recently I figured out that SQLAlchemy\'s Column default doesn\'t work as I expect it to:
>>> Base = declarative_base()
>>> class TestModel
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)