Как я могу автоматически заполнять поля базы данных SQLAlchemy? (Колба-SQLAlchemy)
У меня простая пользовательская модель, определенная так:
# 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()
Когда я создаю новый объект User, мое поле date_updated
устанавливается на текущее время. Я хотел бы сделать так, чтобы всякий раз, когда я сохраняю изменения в моем объекте User, мое поле date_updated
автоматически устанавливается на текущее время.
Я просмотрел документацию, но для жизни я не могу найти ссылок на это. Я очень новичок в SQLAlchemy, поэтому на самом деле у меня нет опыта в использовании.
Хотела бы поблагодарить вас, спасибо.
Ответы
Ответ 1
Просто добавьте аргумент server_default
или default
в поля столбца:
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())
Я предпочитаю имена столбцов {created,updated}_on
.;)
SQLAlchemy docs о вставки/вставки столбца.
[Изменить]: Обновлен код для использования аргументов server_default
в коде.
[Изменить 2]: Заменено onupdate
аргументами server_onupdate
.
Ответ 2
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())