比如一组数据由件号,描述,型号,供应商等多元素组成,可以单一通过件号查询,也可以通过件号+型号查询,甚至可以描述+型号+供应商查询。在设计逻辑上,是通过排列组合考虑所有可能性吗?
随着可能会查询用到的元素数量增多,除了写得又臭又长,又觉得特别容易错漏
业余爱好开发者,抱歉
随着可能会查询用到的元素数量增多,除了写得又臭又长,又觉得特别容易错漏
业余爱好开发者,抱歉
感谢帮助!
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 Jul 9, 2022
|
2
akira Jul 9, 2022
多条件的组合查询要么都是 或 ,要么都是 与, 看需要,直接列出来就好了
|
3
meeop Jul 9, 2022 代码上:
if(件号!=null) sql+=“ 件号=xxx ” if(型号!=null) sql+=“ 型号=xxx ” 所有排列组合都可以啊 数据库索引上是得排列组合的,所以还是要约束需求,别什么查询都支持 |
4
dcsuibian Jul 9, 2022
引用知乎的:
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 先谢谢各位回答者!你们回复的不少内容一时未能消化。我上传了一张图来具体表达,如果之前文字没有表述足够清晰的话。
|