【发布时间】:2019-03-19 05:55:40
【问题描述】:
总结: 如何使用 OR_ 语句在 SQL Alchemy 中使用 table.column_name 组合查询来自不同数据框列的值。
我正在开发一个 SQL Alchemy 项目,在该项目中我拉下数据框的有效列并将它们全部输入到 SQL Alchemy 的过滤器中。我已经成功地让它运行,它会使用这样的列头输入列的所有条目:
qry = qry.filter(or_(*[getattr(Query_Tbl,column_head).like(x) \
for x in (df[column_head].dropna().values)]))
这产生了我正在寻找的模式 (tbl.column1 like a OR tbl.column1 like b...) AND- 等等。
但是,有些数据帧组需要放在一起,列不同但仍需要放在 OR_ 类别中,
即(想要的结果)
(tbl1.col1 like a OR tbl.col1 like b OR tbl.col2 like c OR tbl.col2 like d OR tbl.col3 like e...) 等等。
我最近的尝试是将需要组合在一起的列分组,然后在这些组中重复以前的样式,例如:
qry = qry.filter(or_((*[getattr(Query_Tbl, set_id[0]).like(x) \
for x in (df[set_id[0]].dropna().values)]),
(*[getattr(Query_Tbl, set_id[1]).like(y) \
for y in (df[set_id[1]].dropna().values)]),
(*[getattr(Query_Tbl, set_id[2]).like(z) \
for z in (df[set_id[2]].dropna().values)])
))
其中 set_id 是对应于 column1、column2 和 column 3 的 3 个字符串的列表,因此我得到了指定的结果,但是,这很简单:
(我实际上得到了什么)
(tbl.col1 像 a 或 tbl.col1 像 b..) AND (tbl.col2 像 c OR tbl.col2 像 d...) AND (tbl.col3 像 e OR...)
在 SQL Alchemy 中是否有更好的方法来解决这个问题以获得我想要的结果,或者最好找到一种方法将 Pandas 的列值直接实现到 getattr() 中以将其用于我现有的代码?
感谢您的阅读并提前为您提供帮助!
【问题讨论】:
标签: python pandas dataframe sqlalchemy