IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Flask JSON postgres enregistrement


Sujet :

Réseau/Web Python

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Flask JSON postgres enregistrement
    Bonjour,

    Dans mon appli, je veux enregistrer des données directement au format Json sous postgres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -- REM INSERT 14
    CREATE TABLE LOGWATCHFILE(
        id serial not null primary key,
        logwatch json
    );
    je crée la table ok, et teste l'insertion d'un donnée -> ok

    sous Flask avec Flask-sqlcodegen je génère ma classe dites model.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Logwatchfile(db.Model):
        __tablename__ = 'logwatchfile'
     
        id = db.Column(db.Integer, primary_key=True, server_default=db.FetchedValue())
        logwatch = db.Column(db.JSON)
    Jusqu'a là rien de transcendent .

    Je crée mon formulaire qui doit envoyer du JSON -> ok et j'écris le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @documents.route('/documents/watch', methods=['POST'])
    def documentWatch():
        if request.method=='POST':
            '''modify process watch'''
            data = request.get_json()
            print(data)
            logwatchfile = Logwatchfile(data)
            #db.session.add(logwatchfile)
            #db.session.commit()
            return json.dumps({'status':'OK','watchFile':'run'});
        else:
            return json.dumps({'status':'KO','watchFile':'error'});
    Mais même avant l'insertion quand je peuple l'objet je me fais insulter ?? et la je sèche, j'avoue que je ne comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        reraise(exc_type, exc_value, tb)
      File "/home/olivier/projets/promanpro/promanpro/server/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
        raise value
      File "/home/olivier/projets/promanpro/promanpro/server/venv/lib/python3.4/site-packages/flask/app.py", line 1639, in full_dispatch_request
        rv = self.dispatch_request()
      File "/home/olivier/projets/promanpro/promanpro/server/venv/lib/python3.4/site-packages/flask/app.py", line 1625, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/home/olivier/projets/promanpro/promanpro/server/documents/views.py", line 19, in documentWatch
        logwatchfile = Logwatchfile(2,data)
    TypeError: __init__() takes 1 positional argument but 3 were given
    J'utilise Flask-SQLAlchemy et Flask en version 0.11

    J'ai cherché pas mal d'exemple sous notre ami Goo.. mais je n'ai pas trouvé mon problème.
    Cela parait si simple ?

    Si une bonne âme passe par là ou ici

    PS : Niveau débutant sous python ... aie !

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par nathieb Voir le message
    Mais même avant l'insertion quand je peuple l'objet je me fais insulter ?? et la je sèche, j'avoue que je ne comprends pas.
    Déjà, l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        logwatchfile = Logwatchfile(2,data)
    TypeError: __init__() takes 1 positional argument but 3 were given
    ne correspond pas au code que vous montrez.
    Elle dit seulement que vous omis d'écrire le constructeur (__init__) de votre classe.

    Citation Envoyé par nathieb Voir le message
    J'ai cherché pas mal d'exemple sous notre ami Goo.. mais je n'ai pas trouvé mon problème.
    Si vous voulez utiliser Flask-SQLAlchemy, commencer par lire les tutos/exemples donnés dans la documentation n'est pas une option: ils donnent des exemples d'écritures de la méthode __init__ mais supposent que vous avez pris le temps d'apprendre à programmer avec Python pour les comprendre (ils ne vous expliquent pas ce que sont class, metaclass,... pourtant utilisés à fond).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut ok je valide
    Bonjour,

    après quelque essais, tu avais raison, il manquait simplement le constructeur (__init__)
    Ce que je ne comprends pas c'est que ces classes ont été générées par flask-sqlcodegen.
    Il faut donc les rajouter à la main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Logwatchfile(db.Model):
        __tablename__ = 'logwatchfile'
     
        id = db.Column(db.Integer, primary_key=True, server_default=db.FetchedValue())
        logwatch = db.Column(db.JSON)
     
        def __init__(self, file_log):
            self.logwatch = file_log
    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

Discussions similaires

  1. Parse JSON et enregistrer dans variables
    Par incent_bzh dans le forum Langage
    Réponses: 6
    Dernier message: 13/04/2016, 11h44
  2. [9.0] Enregistrement des fichiers dans Postgres
    Par IMPRO dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/06/2014, 12h18
  3. Enregistrement d'une image dans une base Postgres
    Par freeway57 dans le forum JDBC
    Réponses: 0
    Dernier message: 03/06/2014, 14h57
  4. nombre de clé d'un enregistrement JSON.
    Par SPACHFR dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/08/2012, 14h17
  5. Utilisateurs de VsFTPd enregistrés dans Postgres.
    Par marcandre dans le forum Réseau
    Réponses: 1
    Dernier message: 22/11/2011, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo