p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 177
    Points : 291
    Points
    291

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 683
    Points : 10 294
    Points
    10 294

    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

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

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

    Informations forums :
    Inscription : mai 2011
    Messages : 177
    Points : 291
    Points
    291

    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
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 683
    Points : 10 294
    Points
    10 294

    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

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

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

    Informations forums :
    Inscription : mai 2011
    Messages : 177
    Points : 291
    Points
    291

    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 confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 177
    Points : 291
    Points
    291

    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. Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum WAMP
    Réponses: 1
    Dernier message: 20/08/2006, 18h55
  3. Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & SQL-Server
    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