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

Bibliothèques tierces Python Discussion :

sqlsoup : Problème "raw sql"


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut sqlsoup : Problème "raw sql"
    Salut à tous,

    J'ai un soucis avec sqlsoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    query1= db.execute('select * from client where nclient = 155')
    query2= db.execute('select * from client where nclient = :monclient',monclient=155)
    La première requête est exécutée sans soucis. Tandis que pour la seconde
    j'obtiens un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      File "build\bdist.win32\egg\sqlalchemy\ext\sqlsoup.py", line 574, in execute
        return self.session.execute(sql.text(stmt, bind=self.bind), **params)
      File "build\bdist.win32\egg\sqlalchemy\orm\scoping.py", line 114, in do
        return getattr(self.registry(), name)(*args, **kwargs)
      File "build\bdist.win32\egg\sqlalchemy\orm\session.py", line 799, in execute
        bind = self.get_bind(mapper, clause=clause, **kw)
    TypeError: get_bind() got an unexpected keyword argument 'nprospect'
    Pourtant, d'après la doc, c'est ainsi qu'il faut procéder pour exécuter une requête paramétrée.

    Je sais qu'avec sqlalchemy il vaut mieux utiliser l'ORM. Cependant, je souhaite
    faire une application qui gère des requêtes sql.

    Dès lors, ma question est :
    Quelqu'un a-til déjà rencontré ce problème avant moi ? Le cas échéant, il y a a-t-il une solution autre que celle de passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.connection.cursor
    qui est un peu trop dépendante du SGBD pour ce que je souhaite réaliser ?


    Merci mille fois par avance pour vos réponses

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,
    Juste une idée. Lorsque j'utilise SA pour faire ce genre de requêtes qui sont "en dessous" de l'ORM tout en restant "au dessus" du driver (connection.cursor), j'utilise "engine" et pas "session" (qui est on-top de l'ORM)
    Essayez voir.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Justement, je travaille avec engine.

    Notez que, faute de temps, ce projet est en sommeil pour quelque jours. Mais
    je vais devoir m'y atteler sérieusement prochainement.

    D'ici la fin de la semaine, je vais tester tout ça plus avant. Il m'étonnerait
    que sqlsoup ait un bug sur ce point. Soit la doc est incomplète, soit il y a quelque chose que j'ai loupé. Comme je suis relativement nouveau dans Sql Alchemy, je peine quelque fois, mais cela en vaut vraiment la peine.

    Au pis, dans une première mouture, je ferais ces requête au niveau driver

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,
    Citation Envoyé par chticricri Voir le message
    Justement, je travaille avec engine.
    A mon sens, si c'était le cas, vous ne devriez pas appeler "self.session.execute".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Merci beaucoup Wiztrick,

    J'avais mal saisi ce que tu voulais dire en parlant du niveau engine
    En fait il n'est même besoin d'utiliser sqlsoup pour ce que je veux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sql = "select id,cname,birthdate from emmployees where id = :nid"
        with engine.begin()as conn:
            query  = conn.execute(sql,nid=747)

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Merci beaucoup Wiztrick,

    J'avais mal saisi ce que tu voulais dire en parlant du niveau engine
    En fait il n'est même besoin d'utiliser sqlsoup pour ce que je veux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        sql = "select id,cname,birthdate from emmployees where id = :nid"
        with engine.begin()as conn:
            query  = conn.execute(sql,nid=747)
    et ça fonctionne nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/02/2009, 17h36
  2. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  3. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 09h40

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