2009-06-04 9 views
3

J'ai deux tables « tags » et « deal_tag », et la définition de la table suit,Créer une requête SQL à l'aide sqlalchemy sélectionner et joindre les fonctions

Table('tags', metadata, 
      Column('id', types.Integer(), Sequence('tag_uid_seq'), 
       primary_key=True), 
      Column('name', types.String()), 
     ) 

Table('deal_tag', metadata, 
     Column('dealid', types.Integer(), ForeignKey('deals.id')), 
     Column('tagid', types.Integer(), ForeignKey 
      ('tags.id')), 
     ) 

Je veux choisir id tag, le nom de l'étiquette et le nombre des transactions (nombre des offres par tag). Exemple de requête est

SELECT tags.Name,tags.id,COUNT(deal_tag.dealid) FROM tags INNER JOIN 
deal_tag ON tags.id = deal_tag.tagid GROUP BY deal_tag.tagid; 

Comment puis-je créer la requête ci-dessus à l'aide sqlalchemy sélectionner & rejoindre fonctions?

Répondre

2

pour cette solution ...

s = select([tags.c.Name, tags.c.id, func.count(deal_tag.dealid)], 
      tags.c.id == deal_tag.c.tagid).group_by(tags.c.Name, tags.c.id) 
+1

Vous avez oublié le .group_by (deal_tag.c.tagid). Et cela ne fonctionnera pas sur les DB qui respectent le standard SQL, vous devez grouper par tags.c.Name et tags.c.id, car ils sont sélectionnés. –

0

vous pouvez vous joindre à la table dans le temps de table de correspondance

dans le orm.mapper()

pour plus d'informations, vous pouvez passer par le lien

www.sqlalchemy.org/docs/

Questions connexes