Lor*_*ssi 6 python sqlite sqlalchemy dynamic filter
我刚开始使用SQLAlchemy.我决定使用它,因为我在sqlite查询中使用了很多字符串表达式.
所以,这是我的问题.我有一张桌子,里面有许多设备,每个设备都有维护等级的日期.关键是用户可以选择他想要在屏幕上看到的维护级别.因此,我应该为他选择的每个维护级别组合"调整"我的SQLAlchemmy.
例如,在原始SQLite中.
SELECT*WHERE(设备IN [])和m_level1 = DATE AND m_level2 = DATE ....)
因此,每个if条件都可以有许多组合,它取决于检查哪个复选框.正如我所提到的,在原始SQL中我使用了很多字符串来达到我的目标.但我想使用SQLAlchemy改进代码.
对不起,我现在没有代码!谢谢你们 !
Bus*_*ust 18
我假设您正在使用ORM.
在这种情况下,该filter
函数返回一个查询对象.您可以通过执行类似的操作来条件地构建查询
query = Session.query(schema.Object).filter_by(attribute=value)
if condition:
query = query.filter_by(condition_attr=condition_val)
if another_condition:
query = query.filter_by(another=another_val)
#then finally execute it
results = query.all()
Run Code Online (Sandbox Code Playgroud)
如果我们谈到 SQLAlchemy 核心,还有另一种方式:
from sqlalchemy import and_
filters = [table.c.col1 == filter1, table.c.col2 > filter2]
query = table.select().where(and_(*filters))
Run Code Online (Sandbox Code Playgroud)
如果您尝试根据传入表单条件进行过滤:
form = request.form.to_dict()
filters = []
for col in form:
sqlalchemybinaryexpression = (getattr(MODEL, col) == form[col])
filters.append(sqlalchemybinaryexpression)
query = table.select().where(and_(*filters))
Run Code Online (Sandbox Code Playgroud)
其中 MODEL 是您的 SQLAlchemy 模型
归档时间: |
|
查看次数: |
5979 次 |
最近记录: |