SQLAlchemy 中使用 keys() 的列名顺序

Order of column names with keys() in SQLAlchemy

在选择 所有列 时,我能否依靠 keys() 始终 return 列名称与查询结果的顺序相同?根据我的输出,它似乎是真的,但我找不到任何保证它的文档。我倾向于认为这是真的,因为虽然字典可能是无序的,但它们应该是一致的。

    # 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 也以与值相同的顺序出现在 return 名称中,但我再次不确定它是否总是正确的。

    # Prepend list of column names as the first row
    rows.insert(0, [col['name'] for col in Session.query(table).column_descriptions])

任何帮助将不胜感激。谢谢!

返回的行数为KeyedTuple;它们在 1 个查询中的顺序由原始 select 中列的顺序决定,这将绝对保证顺序与 .keys() 返回的顺序相同,并且每个项目的顺序相同在相同的查询结果中。