感谢帮助!
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-07-09 20:42:00 +08:00
|
2
akira 2022-07-09 22:03:36 +08:00
多条件的组合查询要么都是 或 ,要么都是 与, 看需要,直接列出来就好了
|
3
meeop 2022-07-09 22:50:06 +08:00 1
代码上:
if(件号!=null) sql+=“ 件号=xxx ” if(型号!=null) sql+=“ 型号=xxx ” 所有排列组合都可以啊 数据库索引上是得排列组合的,所以还是要约束需求,别什么查询都支持 |
4
dcsuibian 2022-07-09 23:01:59 +08:00
引用知乎的:
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-07-09 23:20:22 +08:00 1
|