如何根据python字典中的值筛选sqlalchemy表

如何根据python字典中的值筛选sqlalchemy表,python,python-3.x,postgresql,sqlalchemy,Python,Python 3.x,Postgresql,Sqlalchemy,给定具有状态和值的dict,我想筛选表行: my_join_data = [ { "status": "status0", "value": 20, }, { "status": "status1", "value": 25, }, ] 表值: id status value 0 status0 10 1 status0 25 2 status0 30 3

给定具有状态和值的dict,我想筛选表行:

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_数据来自外部源,因此无法存储到数据库中。 我想将我的_join_数据转换为类似sqlalchemy表的对象,这样我就可以在之后以一种相当于以下方式进行连接和过滤:

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
)

有没有办法做到这一点?数据库是PostgreSQL

如果不上载SQL表或编写复杂的case语句,则无法使用数据库外部的表筛选sqlalchemy语句中的SQL表

您可以将join_数据和SQL表加载到DataFrames中,然后进行联接和筛选

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')
首先,我将把词典列表浓缩成一条格言

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}
然后将两者读入数据帧

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')
merged\u df=sql\u df.merge(join\u df,how='left',on='status',后缀=('','u filter'))
过滤的_df=合并的_df.loc[合并的_df['value _filter']<合并的_df['value']]
过滤的\u df.drop(columns='value\u filter')

它是否比从数据库获取数据然后循环结果以应用过滤器更有效?