Stocker des données avec un BOT Discord

Le problème exposé dans ce sujet a été résolu.

Tu peux utiliser une base de données SQLite, ça tient en un seul fichier et le module est très souvent déjà inclus avec Python sans avoir besoin d’installer quoi que ce soit : https://docs.python.org/3/library/sqlite3.html

Sinon, Heroku propose PostgreSQL dans son offre si je ne m’abuse, tu peux donc l’utiliser via un module à installer comme psycopg2 : https://pypi.org/project/psycopg2/

Tout à fait, un fichier sera créé et il contiendra les données. Il existe en effet un mode en RAM (il faut passer :memory: en nom de fichier pour cela) mais les données ne seront pas persistantes, dans ce cas.

Je ne sais pas si avec Heroku c’est un problème de devoir créer un fichier persistant depuis ton app Python. Si oui, il faudra alors envisager d’utiliser leur DB, ou bien de changer de provider.

Oui mais alors où dois-je stocker le fichier de SQLite pour que mon programme tournant sur Heroku le trouve ?

Chevalier Saphir

Il faut d’abord s’assurer que Heroku puisse effectivement supporter cela. Si Heroku ne supporte pas la gestion de fichiers aux côtés de l’application Python, il ne sera pas possible d’utiliser ni SQLite, ni des fichiers simples pour sauvegarder tes informations.

D’après leur documentation, ça semble assez mal parti :

The Heroku filesystem is ephemeral - that means that any changes to the filesystem whilst the dyno is running only last until that dyno is shut down or restarted. Each dyno boots with a clean copy of the filesystem from the most recent deploy. This is similar to how many container based systems, such as Docker, operate.

Tu as donc les solutions suivantes :

  • Utiliser une DB fournie par Heroku (il y a PostgreSQL et Redis)
  • Ne pas utiliser Heroku et héberger ton bot ailleurs où il sera possible d’avoir une DB en fichier

Quel produit de chez Heroku utilises-tu actuellement ? Un Dyno gratuit ?

Et il n’est pas possible pour Python de modifier un fichier se trouvant sur un site comme Github ?

Chevalier Saphir

Tout est possible dans l’absolu, mais la question est surtout de savoir si c’est la solution correcte et simple pour gérer ton problème.

Quand tu parles de « données », de quoi s’agit-il exactement ?

Pour répondre de façon plus générale, tu es ici dans un environnement dit Cloud. On ne raisonne pas tout à fait de la même façon qu’avec les environnements traditionnels tels qu’un serveur et ta machine personnelle. Dans une environnement traditionnel, tu pourrais te contenter de modifier des fichiers avec Python sur la machine comme tu veux. Mais dans un environnement Cloud (comme celui de Heroku et ses concurrents), la notion de serveur n’existe plus tellement. Tu raisonnes plutôt en terme de plusieurs services à utiliser conjointement pour faire tourner une application complète : un dyno pour exécuter le code Python, une DB pour stocker les données, un Object Storage pour stocker les fichiers, …

Quand on débute, ce n’est pas vraiment ce qu’il y a de plus simple à gérer, même si les cloud providers comme Heroku font un marketing pour raconter le contraire :-°

D’accord mais est-ce qu’il existe une manière pour que Python voie les fichiers stockés sur Github et/ou les modifie ?

Chevalier Saphir

Oui, il existe des lib Python pour travailler avec des dépôts Git (de Github, entres autres).

Mais j’attire ton attention sur le fait qu’un dépôt Git n’est pas, en général, l’endroit pour stocker les données produites par ton application Python. Ce n’est pas conçu pour cela.

Que cherches-tu à faire exactement ?

Le stockage de données dans un fichier est à oublier d’après les termes que cite @sgble : toute donnée stockée disparaîtrait au redémarrage du programme.
Même chose si tu utilisais une base de données SQLite en mémoire.

Il va donc te falloir comme indiquer te tourner vers une autre solution pour le stockage des données, par exemple PostgreSQL qui est proposé.

Pour avoir utilisé Heroku pendant plusieurs années, je confirme ce qui a été dis précédemment : les dynos (même ceux payants) sont redemarrés tous les 24h (environ). Par conséquent, si tu sauvegardes un fichier dans un dyno, il n’aura une espérance de vie que de 24h maximum.

La meilleure solution consiste en l’utilisation d’un stockage détaché, comme par exemple une base de données PostgreSQL (dont une version gratuite est proposée par Heroku). C’est très simple à mettre en place, et l’utilisation d’un ORM peut te faciliter davantage la tâche !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte