SQLALCHEMY - 迭代数据

时间:2011-06-22 20:18:32

标签: python sqlalchemy iteration

当我使用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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

有一种更简单的方法可以在不使用'查询的情况下迭代列名称,并且可以在文档here中找到有关访问表格和列的详细信息。

基本上它看起来像这样:

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

我发现这篇文章已经过时了,但是此信息可能对有人看来仍有帮助。

答案 2 :(得分:0)

如果MyTable是ORM映射类,您可以定义__str____repr__方法,然后它将以您希望的方式打印。否则你只想改为for row in session.execute():

答案 3 :(得分:0)

你可以这样做。

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)