How Can I Automatically Populate SQLAlchemy Database Fields? (Flask-SQLAlchemy)

database, flask, flask-sqlalchemy, postgresql, sqlalchemy

Solution

Just add `server_default` or `default` argument to the column fields:

created_on = db.Column(db.DateTime, server_default=db.func.now())
updated_on = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())

I prefer the `{created,updated}_on` column names. ;)

SQLAlchemy docs about column insert/update defaults.

[Edit]: Updated code to use `server_default` arguments in the code.

[Edit 2]: Replaced `onupdate` with `server_onupdate` arguments.

Problem

I've got a simple User model, defined like so: ``` # models.py from datetime import datetime from myapp import db class User(db.Model): id = db.Column(db.Integer(), primary_key=True) email = db.Column(db.String(100), unique=True) password = db.Column(db.String(100)) date_updated = db.Column(db.DateTime()) def __init__(self, email, password, date_updated=None): self.email = email self.password = password self.date_updated = datetime.utcnow() ``` When I create a new User object, my `date_updated` field gets set to the current time. What I'd like to do is make it so that whenever I save changes to my User object my `date_updated` field is set to the current time automatically. I've scoured the documentation, but for the life of me I can't seem to find any references to this. I'm very new to SQLAlchemy, so I really have no prior experience to draw from. Would love some feedback, thank you.

Original source