Подтвердить что ты не робот

Как я могу автоматически заполнять поля базы данных 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, поэтому на самом деле у меня нет опыта в использовании.

Хотела бы поблагодарить вас, спасибо.

4b9b3361

Ответ 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())