如何使用单元格数据作为键和值而不是列名从 SQLAlchemy 行构建字典?

How can I build a dictionary from a SQLAlchemy row, using cell data as keys and values instead of column names?

我正在构建一个 Flask API 以从我无法修改的 Woocommerce 数据库中检索信息。

这是其中一个表架构,我只需要其中的列 meta_keymeta_value.

MariaDB [<db_name>] DESCRIBE aus_postmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| meta_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| post_id    | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

如列名所示,列 meta_key 是一个键(例如,_billing_address ) 然后 meta_value 列本身存储帐单地址字符串。我想做的是建立一个字典(或一个集合),其中 键是 而不是 列名,而是 持有的值meta_key,分别是字典值是存储在meta_value.

中的信息

这是我 运行 检索按 id 筛选的列并仅获取所需的 meta_keys 的查询。

#columns is an array of strings

rows = db.session.query(t_aus_postmeta).\
    with_entities(t_aus_postmeta.c.meta_key, t_aus_postmeta.c.meta_value, ).\
        filter(t_aus_postmeta.c.post_id == order_id).\
            filter(t_aus_postmeta.c.meta_key.in_(columns)).\
                all()

使用以下代码,as advised in this question 从查询返回的 row 对象构建字典:

# Returns a list with a dictionary, but both keys and values are tuples

>>>> as_dict = [dict(zip(row.keys(), row) for row in rows)]
[{('meta_key', '_billing_shipment'): ('meta_value', 'Recupérate pronto'), ('meta_key', '_order_total'): ('meta_value', '134000')}]

但我想取meta_key中的值,用它作为字典键。分别取meta_value中的值作为那个key对应的值,所以会是这样的:

{
    "_billing_shipment": "Recupérate pronto",
    "_order_total": "134000"
    # and so on...
}

我一直在努力解决这个问题,但还没有找到一种方法来构建我需要的字典。我该怎么做?看上面代码返回的元组,我觉得一定有办法做类似tuple.meta_key(字典键)和tuple.meta_value之类的事情,但我想不出什么。

dict = {result.meta_key: result.meta_value for result in results}

比我想象的要容易得多。