SQLALCHEMY — перебор данных

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

Eg.

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, чтобы вернуть данные из всех столбцов?


person sidewinder    schedule 22.06.2011    source источник


Ответы (4)


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
person sayap    schedule 23.06.2011

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

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

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

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

person ariana    schedule 01.09.2015

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

person underrun    schedule 24.06.2011

Вы можете сделать что-то вроде этого.

rows = MyTable.query.all()
# Get all the column names of the table in order to iterate through
column_keys = MyTable.__table__.columns.keys()
# Temporary dictionary to keep the return value from table
rows_dic_temp = {}
rows_dic = []
# Iterate through the returned output data set
for row in rows:
    for col in column_keys:
        rows_dic_temp[col] = getattr(row, col)
    rows_dic.append(rows_dic_temp)
    rows_dic_temp= {}
return jsonify(rows_dic)
person navodissa    schedule 05.06.2021