SQLAlchemy中带键()的列名顺序

时间:2015-02-23 15:44:32

标签: python python-2.7 sqlalchemy

在选择所有列时,我是否可以依赖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])

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

1 个答案:

答案 0 :(得分:1)

返回的行是KeyedTuple s;在1个查询中它们的排序由原始选择中的列的顺序决定,这绝对保证顺序与.keys()返回的顺序相同,并且对于同一查询中的每个项目都是相同的结果