在选择所有列时,我是否可以依赖keys()始终以与查询结果相同的顺序返回列名?基于我的输出它似乎是真的,但我找不到任何保证它的文档。我倾向于认为这是真的,因为虽然字典可能是无序的,但它们应该是一致的。
# Loop through each table in the database where all tables
# are being reflected at once.
for table in Base.metadata.tables.values():
# Select all columns
rows = Session.query(table).all()
# Prepend a header row
rows.insert(0, rows[0].keys())
# Output to file
fh = open(filename, 'wb')
outcsv = unicodecsv.writer(fh)
outcsv.writerows(rows)
fh.close
同样,column_descriptions也会以与值相同的顺序返回名称,但我不确定它是否始终为真。
# Prepend list of column names as the first row
rows.insert(0, [col['name'] for col in Session.query(table).column_descriptions])
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
返回的行是KeyedTuple s;在1个查询中它们的排序由原始选择中的列的顺序决定,这绝对保证顺序与.keys()
返回的顺序相同,并且对于同一查询中的每个项目都是相同的结果