Python 如何在SQLAlchemy中动态使用select?
我正在尝试创建一个函数,该函数可以使用SQLAlchemy过滤sql表,并带有可选参数 功能是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)
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