Python 如何在SQLAlchemy中动态使用select?

Python 如何在SQLAlchemy中动态使用select?,python,sqlalchemy,args,Python,Sqlalchemy,Args,我正在尝试创建一个函数,该函数可以使用SQLAlchemy过滤sql表,并带有可选参数 功能是 def fetch_new_requests(status, request_type, request_subtype, engine, id_r=None): table = Table('Sample_Table', metadata, autoload=True, autoload_with=engine)

我正在尝试创建一个函数,该函数可以使用SQLAlchemy过滤sql表,并带有可选参数

功能是

def fetch_new_requests(status, request_type, request_subtype, engine, id_r=None):
        table = Table('Sample_Table', metadata, autoload=True,
                           autoload_with=engine)
        
        query = session.query(load_requests).filter_by(status = status, 
                                                      request_type = request_type, 
                                                      request_subtype = request_subtype, 
                                                      id_r = id_r)
        return pd.read_sql((query).statement,session.bind)
但如果我没有定义id\r变量,它每次返回一个空表时都会返回

我在谷歌上搜索过,但找不到一条蚯蚓

我曾尝试使用**kwargs,但这不是我真正需要的,我的意思是在这里我必须明确定义列名,然后再次谈到id\r的问题

def fetch_new_requests(**kwargs):
    
    for x in kwargs.values():
        query = session.query(load_requests).filter_by(status=x)
    return pd.read_sql((query).statement,session.bind)
我的理想结果

def fetch_new_requests(any column names, values of the columns):
    
    for x in kwargs.values():
        query = session.query(load_requests).filter_by(column_name=column_value)
    return pd.read_sql((query).statement,session.bind)

从理论上讲,我可以使用两个列表或一个dict,但如果有其他解决方案,我很乐意听到

我只能给你一个关于SQLAlchemy核心语法的答案,但它可以使用dict!它在其键中有列名,在值中有所需的值

table = Table('Sample_Table', metadata, autoload=True,
                       autoload_with=engine)
query = table.select()
where_dict = {"status": 1, "request_type": "something"}
for k, v in where_dict.items():
    query = query.where(getattr(table.c, k) == v)
为完整起见:以下是只选择特定字段的语法(您的问题听起来好像您也在寻找这个):


你在找类似的东西吗?
query = table.select().with_only_columns(select_columns)  # select_columns is a list