SQLALCHEMY - 遍历数据

9 投票
4 回答
32851 浏览
提问于 2025-04-16 20:07

当我使用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

撰写回答