7
votes

Comment puis-je persister une valeur unique dans Django?

Mon application Django récupère chaque jour un flux RSS. Je voudrais persister le temps que le flux a été mis à jour quelque part dans l'application. Je n'ai que récupérer un aliment, il ne grandira jamais de multiples flux. Comment puis-je persister le dernier temps mis à jour?

mes idées jusqu'à présent

  1. Créez un modèle et ajoutez un champ DateTime à celui-ci. Cela semble être trop exemplaire car il ajoute une autre table à la base de données, dans laquelle il n'y aura jamais une rangée. Autre que cela, c'est la solution la plus évidente et la plus simple.

  2. Créez un objet de réglages qui stocke simplement des mappages de clé / de valeur. La dernière date mise à jour serait simplement une ligne dans cette base de données. Ceci est essentiellement une version générique de la solution précédente.

  3. Utilisez dbsttings / Django-valeurs , qui vous permet de stocker Paramètres dans la base de données. La dernière date mise à jour serait simplement un «réglage».

    Toute autre idée qui me manque?


2 commentaires

Vous n'avez pas d'objet représentant le flux RSS.


Nope, cet aliment n'est représenté nulle part dans mes modèles.


7 Réponses :


0
votes

Si vous en avez besoin uniquement pour la mise en cache, pourquoi ne pas la stocker dans le memcached?

D'autre part, si vous utilisez ces données à d'autres fins (par exemple, affichez-la sur la page ou pour effectuer un certain calcul, etc.), alors je la stockerais dans un nouveau modèle - à Django, toute la persistance est Construit sur la base de données, via des modèles, et je n'essaierais pas d'utiliser d'autres solutions "intelligentes".


0 commentaires

2
votes

Une solution que j'ai utilisée dans le passé consiste à utiliser la fonction de cache de Django. Vous définissez une valeur sur true avec une heure d'expiration d'un jour (dans votre cas.) Si la valeur n'est pas définie, vous récupérez le flux, sinon vous ne faites rien.

Vous pouvez voir ma solution ici: Importation de votre Photos Flickr avec Django


0 commentaires

0
votes

Une chose que j'avais l'habitude de faire lorsque je partagé avec PHP, devait stocker le XML quelque part, mais avec une nouvelle balise insérée pour contenir l'horodatage de la dernière récupération. Ce n'était pas génial, mais c'était rapide et simple.


0 commentaires

8
votes

Malgré les faits, les bases de données stockent régulièrement de nombreuses lignes dans une table donnée, avoir une table avec une seule rangée n'est pas particulièrement coûteuse, tant que vous n'avez pas (m) des index, qui ne gaspideraient pas. En fait, la plupart des bases de données créent de nombreuses tables de rangée pour implémenter certaines fonctionnalités, telles que des séquences monotoniques utilisées pour générer des clés primaires. Je vous encourage à créer un modèle régulier pour cela.


1 commentaires

C'est ce que j'ai fini par faire. Après plus de pensées, j'ai créé un modèle.



2
votes
  1. RAM est volatile em>, donc pas em> persistant: Memcached n'est pas ce que vous avez demandé. Li>
  2. xml c'est pas em> la bonne technologie pour stocker une valeur unique. LI>
  3. RDMS est pas em> la bonne technologie pour stocker une valeur unique. LI>
  4. Le cadre de cache Django répondra à votre question si la cache_backend est définie sur autre chose que fichier: // ... em> li>

    Le système de fichiers est em> la bonne technologie pour "persister une valeur unique". p>

    in Params.py:

     0 5 * * * /path/to/manage.py runscript /path/to/retreive/script
    


0 commentaires

0
votes

Le garder simple conduirait à l'idée de simplement le stocker dans le système de fichiers ... Pourquoi ne pouvez-vous pas faire ça? Vous pouvez, par exemple, avoir un module siteconfig dans l'une de vos applications qui détenaient ces types de données. Cela pourrait charger des données à partir d'un fichier spécifique, qui pourrait être du texte, du JSON, de la configuration, du cornichon ou du format approprié. Just Importer siteconfig quelque part, et il peut charger les données et la rendre disponible pour les autres modules de votre site. Vous pouvez facilement étendre ceci pour contenir un objet de type dict avec un certain nombre de paramètres (par exemple, si vous avez des flux multiples, mais vous ne voulez pas avoir de modèle uniquement pour 2-3 lignes, vous pouvez facilement tenir le dernier. Temps récupéré pour chaque aliment dans une dicte saisie par URL d'alimentation).


0 commentaires

0
votes

Créer une clé de session, qui persiste pour toujours et mettez à jour l'horodatage d'alimentation à chaque fois que vous y accédez.


0 commentaires