如何根据python字典中的值筛选sqlalchemy表
给定具有状态和值的dict,我想筛选表行:如何根据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
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')
它是否比从数据库获取数据然后循环结果以应用过滤器更有效?