Maison  >  Article  >  développement back-end  >  Exemple de code Python pour modifier régulièrement le database_python

Exemple de code Python pour modifier régulièrement le database_python

不言
不言original
2018-04-08 10:42:291818parcourir

Cet article présente principalement l'exemple de code pour modifier régulièrement la base de données en python. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.

Lorsque nous devons modifier régulièrement la base de données, nous choisissons généralement de démarrer un processus planifié pour modifier la base de données. Si ce genre de tâche planifiée est écrite dans l'entreprise et écrite comme une interface, le processus planifié semble un peu inapproprié ? Si vous devez modifier la base de données 100 fois régulièrement, la méthode conventionnelle démarrera 100 processus. Bien que ce processus soit très léger, il reste inconfortable. En fait, nous pouvons utiliser threading.Timer pour créer les threads correspondants afin d'effectuer des opérations de modification de bibliothèque, et l'idée est relativement simple.

1. Passez update_time, l'heure à laquelle l'opération de modification de la base de données est effectuée, et utilisez la méthode de soustraction entre update_time et l'heure actuelle pour obtenir le time_delay jusqu'à l'opération de modification de la base de données. Pour trouver la différence de temps entre deux chaînes de format d'heure standard, vous pouvez utiliser datetime.datetime.strptime() pour formater l'heure. L'heure formatée peut être directement soustraite et le résultat peut être converti en secondes en exécutant .seconds() <.>

2. Encapsulez l'opération de modification de la bibliothèque dans la méthode update(), puis transmettez la mise à jour et le décalage horaire dans le thread créé par threading.Timer. L'utilisation est créée par threading.Timer(interval, function, args. =[], kwargus={}) Instance de thread, l'intervalle est le temps d'exécution du retard, l'unité est en secondes, puis start() est exécuté. Timer n'est pas bloquant et peut créer plusieurs threads sans s'affecter les uns les autres.

Le code est le suivant


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from model import Table
from handler.base_handler import BaseHandler
from threading import Timer
import datetime


class TimeHandler(BaseHandler):
  def do_action(self):
    update_time = "2018-04-07 18:00:00"
    ads_id = "test_1"
    t_online = datetime.datetime.strptime(update_time, &#39;%Y-%m-%d %H:%M:%S&#39;)
    now = datetime.datetime.now().strftime(&#39;%Y-%m-%d %H:%M:%S&#39;)
    t_now = datetime.datetime.strptime(now, &#39;%Y-%m-%d %H:%M:%S&#39;)
    time_delay = (t_online - t_now).seconds
    t1 = Timer(time_delay, self.update, (ads_id, ))
    t1.start()
    self.result = "success"
    return

  def update(self, ads_id):
    self.db.dsp.query(Table).filter(Table.ads_id == ads_id).update({Table.is_del: 0})
    self.db.dsp.commit()


Vous pouvez remplacer update_time par le paramètre transmis par le front terminez, puis vous pourrez Il est temps d'effectuer l'opération de modification de la base de données. J'ai rencontré un petit écueil à ce moment-là, c'est-à-dire que l'opération de modification de la base de données n'a pas pris effet car le commit() dans la dernière ligne n'a pas été ajouté. À l'origine, le commit pour modifier la bibliothèque a été écrit dans la classe de base BaseHandler pour prendre effet, mais update() ici est exécuté dans le thread Timer, ce qui est une opération asynchrone. Commit() doit être exécuté dans le thread pour être exécuté. les changements effectifs.

Cette méthode d'exécution du chronométrage à l'aide de Timer est plus légère et plus simple que le processus de chronométrage traditionnel, mais elle présente également des inconvénients évidents. Lorsque le service est arrêté, tous les threads de synchronisation seront détruits ainsi que le processus principal. La condition préalable à l'exécution réussie de tous les threads est que le service doit être stable et ne peut pas être redémarré. Si vous souhaitez redémarrer le service, vous devez trouver un moyen d'écrire les tâches inachevées sur le disque (telles que l'écriture dans la base de données), puis lire les tâches précédemment inachevées et recréer le thread de synchronisation lors du démarrage du service.

Recommandations associées :

Explication détaillée de la lecture et de l'écriture de fichiers en Python



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn