当我使用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
从所有列返回数据吗?
答案 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)