如何使用单元格数据作为键和值而不是列名从 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_key 和 meta_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}
比我想象的要容易得多。
我正在构建一个 Flask API 以从我无法修改的 Woocommerce 数据库中检索信息。
这是其中一个表架构,我只需要其中的列 meta_key 和 meta_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}
比我想象的要容易得多。