Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Bibliothèques tierces
Bibliothèques tierces Forum d'entraide pour les autres bibliothèques non présentes dans la distribution standard de Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2012, 09h00   #1
chticricri
Membre habitué
 
Homme Christian Havard
Développeur informatique
Inscription : mai 2011
Messages : 101
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 : 101
Points : 141
Points : 141
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
chticricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 19h33   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 709
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 709
Points : 4 546
Points : 4 546
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 12h33   #3
chticricri
Membre habitué
 
Homme Christian Havard
Développeur informatique
Inscription : mai 2011
Messages : 101
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 : 101
Points : 141
Points : 141
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
chticricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 13h38   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 709
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 709
Points : 4 546
Points : 4 546
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/09/2012, 11h02   #5
chticricri
Membre habitué
 
Homme Christian Havard
Développeur informatique
Inscription : mai 2011
Messages : 101
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 : 101
Points : 141
Points : 141
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)
chticricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2012, 11h03   #6
chticricri
Membre habitué
 
Homme Christian Havard
Développeur informatique
Inscription : mai 2011
Messages : 101
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 : 101
Points : 141
Points : 141
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
chticricri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h21.


 
 
 
 
Partenaires

Hébergement Web