
感谢帮助!
sql = "select code, desc, engine, cost, supplier, offer, uweight, remarkinfo, podate, qty from f65 where 1=1" param = list() if code != '': sql = sql + ' AND code LIKE ?' param.append('%' + str(code) + '%') if desc != '': sql = sql + ' AND desc LIKE ?' param.append('%' + str(desc) + '%') if engine != '': sql = sql + ' AND engine LIKE ?' param.append('%' + str(engine) + '%') if supplier != '': sql = sql + ' AND supplier LIKE ?' param.append('%' + str(supplier) + '%') df = pd.DataFrame(pd.read_sql(sql, conn, params=param)) 1 dunkelheit 2022 年 7 月 9 日 |
2 akira 2022 年 7 月 9 日 多条件的组合查询要么都是 或 ,要么都是 与, 看需要,直接列出来就好了 |
3 meeop 2022 年 7 月 9 日 代码上: if(件号!=null) sql+=“ 件号=xxx ” if(型号!=null) sql+=“ 型号=xxx ” 所有排列组合都可以啊 数据库索引上是得排列组合的,所以还是要约束需求,别什么查询都支持 |
4 dcsuibian 2022 年 7 月 9 日 引用知乎的: db 访问分为这么几种 1. 写 sql ,各个 db 差异要自己适配 2. 写 dsl ,屏蔽了 db 差异,自动适配 3. 运行时或编译时自动合成 sql ,屏蔽 db 差异 我是第 3 种动态生成 sql 的,用的是 JPA 的 Specification ,代码大概是这个样子: Specification<RecordPO> spec = (root, query, cb) -> { Path<String> termPath = root.get("term"); Path<Long> beginTimePath = root.get("beginTime"); Path<Long> endTimePath = root.get("endTime"); Predicate predicate = cb.equal(cb.literal(1), 1); if (null != qo.getTerm()) { predicate = cb.and(predicate, cb.equal(termPath, qo.getTerm())); } if (null != qo.getBeginTimeGreaterThanEqual()) { predicate = cb.and(predicate, cb.greaterThanOrEqualTo(beginTimePath, qo.getBeginTimeGreaterThanEqual())); } if (null != qo.getEndTimeLessThanEqual()) { predicate = cb.and(predicate, cb.lessThanOrEqualTo(endTimePath, qo.getEndTimeLessThanEqual())); } query.orderBy(cb.asc(root.get("endTime"))); return predicate; }; return spec; |
5 youthfire OP 先谢谢各位回答者!你们回复的不少内容一时未能消化。我上传了一张图来具体表达,如果之前文字没有表述足够清晰的话。 |
6 CEBBCAT 2022 年 7 月 9 日 |