SQLALCHEMY - перебор данных - PullRequest
4 голосов
/ 23 июня 2011

Когда я использую SQLALchemy, как перебирать имена столбцов?

Например.

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

Второй вопрос: у меня следующий запрос:

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

Однако, когда я делаю:

for row in root:
    print row

Я не получаю никаких результатов.Вместо этого я должен сделать:

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

Разве я не могу просто сделать print row, чтобы вернуть данные из всех столбцов?

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

dbsession.query(MyTable).filter(MyTable.name==u'john') пройдет через ORM и вернет вам объекты.Если вы просто хотите вернуть все столбцы, вы можете обойти ORM следующим образом:

query = dbsession.query(MyTable).filter(MyTable.name==u'john')
rows = query.statement.execute().fetchall()
for row in rows:
    print row
2 голосов
/ 01 сентября 2015

Существует более простой способ перебора имен столбцов без использования «запроса», а подробности доступа к таблицам и столбцам можно найти в документации здесь .

По сути это будет выглядеть примерно так:

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

Я признаю, что это сообщение устарело, но эта информация может быть полезна для тех, кто ищет.

0 голосов
/ 24 июня 2011

Если MyTable является сопоставленным классом ORM, вы можете определить __str__ или __repr__ методы, а затем он будет печатать так, как вы этого хотите.В противном случае вы просто хотите сделать for row in session.execute(): вместо.

...