sqlalchemy_database_uri - ¿Cómo puedo llenar automáticamente los campos de la base de datos SQLAlchemy?(Flask-SQLAlchemy)
sqlalchemy and flask (2)
Tengo un modelo de Usuario simple, definido así:
# 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()
Cuando creo un nuevo objeto User, mi campo date_updated
se establece en la hora actual. Lo que me gustaría hacer es hacerlo de modo que cada vez que guarde cambios en mi objeto Usuario, mi campo date_updated
se establezca a la hora actual automáticamente.
Revisé la documentación, pero por mi vida parece que no puedo encontrar ninguna referencia a esto. Soy muy nuevo en SQLAlchemy, así que realmente no tengo experiencia previa para obtener.
Me encantaría algún comentario, gracias.
Simplemente agregue server_default
o default
argumento default
a los campos de la columna:
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())
Prefiero los nombres de columna {created,updated}_on
. ;)
SQLAlchemy documenta los valores predeterminados de inserción / actualización de columnas .
[Editar]: Código actualizado para usar los argumentos de server_default
en el código.
[Editar 2]: se reemplazó onupdate
con los argumentos de server_onupdate
.
date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(),
onupdate=db.func.current_timestamp())