Est possible de créer une Colonne dans SQLAlchemy qui va être rempli automatiquement avec le temps, quand il insérée/mis à jour la dernière fois?
Est possible de créer une Colonne dans SQLAlchemy qui va être rempli automatiquement avec le temps, quand il insérée/mis à jour la dernière fois ?
J'ai créé des modèles, hérité de la classe de Base
class Base(object):
def __tablename__(self):
return self.__name__.lower()
id = Column(Integer, primary_key=True)
last_time = Column(TIMESTAMP, server_default=func.now())
Base = declarative_base(cls=Base)
class EntityModel(Base):
__tablename__ = 'entities'
settlement_id = Column(Integer, ForeignKey('settlements.id'), nullable=False)
type = Column(String(20), nullable=False)
level = Column(Integer, nullable=False, default=0)
energy = Column(Float, nullable=False, default=0)
position_x = Column(Integer, default=0)
position_y = Column(Integer, default=0)
def __repr__(self):
return "<Entity('%s')>" % (self.type)
À chaque fois quand je l'ai mise à jour EntityModel je veux last_time être uodated sur le fonctionnement du système.maintenant(). Je peux le faire sur databse niveau avec des déclencheurs, mais je préfère le faire sur demande si c'est possible.
Vous devez vous connecter pour publier un commentaire.
Dans la classe de Base ajouter onupdate dans la dernière phrase comme suit:
func.now
etfunc.current_timestamp
dans le code ci-dessus, notez qu'ils sont des alias de l'autre (voir docs.sqlalchemy.org/en/latest/core/...).Si vous utilisez MySQL, je crois que vous ne pouvez avoir qu'un auto-mise à jour de colonne datetime, nous utilisons donc des SQLAlchemy de l'événement déclenche la place.
Vous suffit de connecter un écouteur à l' 'before_insert" et " before_update de crochets et de mise à jour que nécessaire:
Je savais que personne ne serait jamais n'oubliez pas de l'ajouter à de nouveaux modèles, donc j'ai essayé de faire le malin et de l'ajouter pour eux.
Tous nos modèles héritent d'un objet de base nous habilement appelé "DatabaseModel". Nous vérifions qui hérite de cet objet et ajouter dynamiquement des éléments déclencheurs pour tous.
C'est OK si un modèle n'ont pas créé ou modifié champ - SQLAlchemy semble ignorer en silence il.
Il est intéressant de noter que, si vous suivez Rachel Sanders' recommandation, vous devriez certainement faire:
dans le cadre de la update_modified_on_update_listener() de l'écouteur d'événement, sinon, vous allez faire des tonnes de base de données redondante mises à jour. La caisse http://docs.sqlalchemy.org/en/latest/orm/events.html#mapper-events dans la section "before_update" pour plus d'informations.