Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre confirmé
    Homme Profil pro Christian Havard
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Nom : Homme Christian Havard
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 149
    Points : 223
    Points
    223

    Par défaut sqlsoup : Problème "raw sql"

    Salut à tous,

    J'ai un soucis avec sqlsoup.

    Code :
    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 :
    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 :
    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
    5 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 399
    Points : 7 561
    Points
    7 561

    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 Christian Havard
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Nom : Homme Christian Havard
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 149
    Points : 223
    Points
    223

    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
    5 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 399
    Points : 7 561
    Points
    7 561

    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 Christian Havard
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Nom : Homme Christian Havard
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 149
    Points : 223
    Points
    223

    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 :
    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 Christian Havard
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Nom : Homme Christian Havard
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2011
    Messages : 149
    Points : 223
    Points
    223

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •