2011-06-22 4 views
3

Lorsque j'utilise SQLALchemy, comment passer en revue les noms de colonne?SQLALCHEMY - Itérer par les données

Par exemple.

Column Name 1, Column Name 2, Column Name 3, etc... 

La deuxième question est que j'ai la requête suivante:

root = dbsession.query(MyTable).filter(MyTable.name==u'john').all() 

Cependant, quand je fais:

for row in root: 
    print row 

Je ne reçois aucun résultat. Au lieu de cela que je dois faire:

print row.name, row.age, etc... 

Je ne peux pas le faire print row pour renvoyer des données de toutes les colonnes?

Répondre

3

passe par ORM et vous renvoie des objets. Si vous voulez juste retourner toutes les colonnes, vous pouvez contourner ORM avec ceci:

query = dbsession.query(MyTable).filter(MyTable.name==u'john') 
rows = query.statement.execute().fetchall() 
for row in rows: 
    print row 
0

Si MyTable est une classe mappée ORM, vous pouvez définir __str__ ou __repr__ méthodes et il imprimera la façon dont vous le souhaitez. Sinon, vous voulez juste faire for row in session.execute(): à la place.

1

Il existe un moyen plus simple de parcourir les noms de colonne sans utiliser 'query', et les détails d'accès aux tables et colonnes se trouvent dans les documents here.

Essentiellement, il ressemblera à quelque chose comme ceci:

metadata = MetaData() 
metadata.reflect(engine) 
tbl = Table('mytable', metadata) 
for column in tbl.c: 
    print column.name 

Je reconnais ce poste est à jour, mais cette information peut-être encore utile pour quelqu'un qui cherche.