繁体   English   中英

如何通过 python 字典中的值过滤 sqlalchemy 表

[英]How to filter sqlalchemy table by values from python dictionary

给定具有状态和值的字典,我想过滤表行:

my_join_data = [
    {
        "status": "status0",
        "value": 20,
    },
    {
        "status": "status1",
        "value": 25,
    },
]

表值:

id  status   value
 0  status0     10
 1  status0     25
 2  status0     30
 3  status1     10
 4  status1     35

my_join_data 取自外部源,因此无法存储到数据库中。 我想将 my_join_data 转换为 sqlalchemy 类似 object 的表,所以我可以在之后以等效于的方式进行连接和过滤:

joined_table = my_table.join(
    my_join_data,
    my_join_data.c.status == my_table.c.status
)

query = sqlalchemy.select([
    my_table.c.id,
    my_table.c.status,
    my_table.c.value,
]).select_from(
    joined_table
).where(
    my_join_data.c.value < my_table.c.value
)

预期的结果是

id  status   value
 1  status0     25
 2  status0     30
 4  status1     35

有什么办法可以做到这一点? 数据库为 PostgreSQL

您无法使用来自数据库外部的表在 sqlalchemy 语句中过滤 SQL 表,而无需上传或编写复杂的 case 语句。

您可以将 join_data 和 SQL 表加载到 Pandas DataFrames 中,然后加入和过滤。

首先,我会将字典列表压缩为一个字典。

status_list = []
value_list = []

for dict in my_join_data:
   status_list.append(dict["status"])
   value_list.append(dict["value"])

join_dict = {'status': status_list, 'value': value_list}

然后将两者读入 DataFrame。

import pandas as pd

join_df = pd.DataFrame.from_dict(join_dict)
sql_df = pd.read_sql_query(query, engine)

然后合并两者并过滤。

merged_df = sql_df.merge(join_df, how='left', on='status', suffixes=('', '_filter'))
filtered_df = merged_df.loc[merged_df['value_filter'] < merged_df['value']]
filtered_df.drop(columns='value_filter')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM