SQLALCHEMY - 遍历数据
当我使用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
来返回所有列的数据吗?
4 个回答
2
你可以这样做。
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)
3
其实有一种更简单的方法可以遍历列名,不用使用'query',关于如何访问表和列的详细信息可以在文档中找到,具体请看这里。
基本上,它的样子会像这样:
metadata = MetaData()
metadata.reflect(engine)
tbl = Table('mytable', metadata)
for column in tbl.c:
print column.name
我知道这篇帖子有点过时,但这些信息对某些人来说可能还是有帮助的。
11
这段代码 dbsession.query(MyTable).filter(MyTable.name==u'john')
是在使用一种叫做ORM的工具,它会帮你从数据库中查找数据,并返回一些对象。如果你只是想要获取所有的列数据,而不需要这些对象,可以用下面的方法来直接获取:
query = dbsession.query(MyTable).filter(MyTable.name==u'john')
rows = query.statement.execute().fetchall()
for row in rows:
print row