SQLALCHEMY - 遍历数据

8
当我使用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个回答

11

dbsession.query(MyTable).filter(MyTable.name==u'john').all()将通过ORM返回对象。如果你只想返回所有列,可以使用以下方法绕过ORM:

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

3

有一种更简单的方法来遍历列名,而无需使用“query”,访问表和列的详细信息可以在文档这里找到。

基本上它会看起来像这样:

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

我知道这篇文章已经过时了,但是对于正在寻找帮助的人来说,这些信息仍然可能有用。


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)

这可能是针对“如何迭代列”部分问题的更好答案。但是谁决定通过调用columns.keys()来获取列名列表?考虑到我们正在谈论数据库,大多数数据库都是关系型的,并且术语“键”已经被定义为关键且与列名完全不同,这是令人关键的。 - user3224303

0
如果MyTable是一个ORM映射的类,你可以定义__str__或__repr__方法,然后它会按你想要的方式打印。否则,你只需要使用for row in session.execute()即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接